我在Win7机器上使用安装在C:上的Zend Server CE(v.5.1.0)。我添加了一个项目到 httpd.conf :
Alias /project "D:\Homepages\project"
<Directory "D:\Homepages\project">
Options Indexes FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
project 目录中的 .htaccess 文件包含以下内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^/\w*\.(css|js) [NC]
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
现在问题;如果我去
一切似乎都运转良好。我到达 index.php 文件并获取我的内容。 但是,如果我转到任何其他会触发RewriteRule的页面,它似乎是添加目录路径。 FireFox输出以下未找到消息:
在此服务器上找不到请求的URL /Homepages/project/index.php。
我试图在这里找到类似的问题/答案,但失败了。任何的想法? PS。我接受答案的时间可能会延迟,因为我会在差事上待一段时间。
答案 0 :(得分:5)
您需要设置RewriteBase指令;否则,mod_rewrite会自动执行,默认情况下会将文件路径添加到生成的重写规则中。
来自:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
当新URL发生替换时,此模块必须将URL重新注入服务器处理。为了能够做到这一点,它需要知道相应的URL前缀或URL基是什么。默认情况下,此前缀是相应的文件路径本身。但是,对于大多数网站而言,URL与物理文件名路径没有直接关系,因此这种假设通常是错误的!因此,您可以使用RewriteBase指令指定正确的URL前缀。 如果您的Web服务器的URL与物理文件路径没有直接关系,则需要在要使用RewriteRule指令的每个.htaccess文件中使用RewriteBase。
答案 1 :(得分:1)
你的最后一行是这样的:
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。