2011-04-25 102 views
0

我正在使用安装在Win7机器上的C:上的Zend Server CE(v.5.1.0)。.htaccess RewriteRule添加到URL的驱动器路径

Alias /project "D:\Homepages\project" 
<Directory "D:\Homepages\project"> 
    Options Indexes FollowSymLinks 
    AllowOverride all 
    Order allow,deny 
    Allow from all 
</Directory> 

的.htaccess文件项目目录包含以下内容::我通过添加添加一个项目的httpd.conf

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_URI} ^/\w*\.(css|js) [NC] 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

我们的问题;如果我去

http://localhost/project/index.php

一切似乎是工作的罚款。我到达index.php文件并获取我的内容。 但是,如果我去任何其他页面,将触发RewriteRule,它似乎是添加目录路径。火狐输出以下未找到消息:

请求的URL /Homepages/project/index.php此服务器上找到。

我试着在这里找到类似的问题/答案,但失败了。任何想法? Ps。我接受一个答案可能会被延迟,因为我将会出差一段时间。

+0

对不起,我的第一篇文章说一切顺利http:// localhost/project。此情况并非如此。当直接进入http://localhost/project/index.php时,它很好。 – ANisus 2011-04-25 13:23:02

回答

2

有你的最后一行是这样的:

RewriteRule ^.*$ /index.php [NC,L] 

不过,我觉得这是无限循环,所以我建议这个规则来代替:

RewriteCond %{THE_REQUEST} !\s/index.php [NC] 
RewriteCond %{REQUEST_URI} !^/index.php [NC] 
RewriteRule . /index.php [L] 

这样可防止去的index.php如果是已经是/index.php。

+0

感谢您的回答!但它不适合我。您的解决方案似乎重定向到http://localhost/index.php而不是http://localhost/project/index.php。当然,我可以把它改成RewriteRule。 /项目/指标。php [L],但我不想将路径硬编码到.htaccess文件中 – ANisus 2011-04-25 15:51:33

+0

一旦您确认答案适合您,请将答案标记为已接受。 – anubhava 2011-04-25 15:53:28

+0

我会..(对不起,评论完成之前的帖子) – ANisus 2011-04-25 15:54:20

5

您需要设置RewriteBase指令;否则,将自动使用mod_rewrite,并且默认情况下会将文件路径预加重到生成的重写规则。

来自:​​

当取代发生于一个新的URL,该模块具有与URL到服务器处理中重新注入。为了能够做到这一点,它需要知道相应的URL前缀或URL基础是什么。默认情况下,这个前缀是相应的文件路径本身。但是,对于大多数网站来说,URL并不直接与物理文件名路径相关,所以这种假设通常是错误的!因此,您可以使用RewriteBase指令来指定正确的URL前缀。 如果您的网络服务器的URL与物理文件路径没有直接关系,您需要在每个想要使用RewriteRule指令的.htaccess文件中使用RewriteBase。