Mod Rewrite在错误路径上加载index.php

时间:2013-11-22 18:05:06

标签: php regex apache .htaccess mod-rewrite

这些是我正在使用的重写规则。此时我正试图强制坏URL加载index.php。 html标记<base href="/directory-name/" />位于index.php的顶部,因此我的css,图像和其他资源正在正确加载。

Options -Indexes +FollowSymLinks
RewriteEngine On 

RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteRule ^(.*)/(.*)/(.*) /index.php?x=$1&y=$2&z=$3 [L]
RewriteRule ^(.*)/(.*) /index.php?x=$1&y=$2 [L]
RewriteRule ^(.*) /index.php?x=$1 [L]

网址示例:

www.domain.com/directory-name/
www.domain.com/directory-name/index.php
www.domain.com/directory-name/index.php/arg1/arg2/arg3

www.domain.com/directory-name/anything-here
www.domain.com/directory-name/anything-here/arg1/arg2/arg3

前3个url示例正常工作并加载index.php。但第4和第5个网址失败并将我转发回存在xampp索引的html root /。我假设最后一次url重写的失败是因为index.php在root目录下的子目录中?

我该如何解决这个问题?即使路径中有其他内容,我如何强制网址加载www.domain.com/directory-name/index.php

1 个答案:

答案 0 :(得分:1)

请尝试以下规则:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?x=$1&y=$2&z=$3 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?x=$1&y=$2 [L]
RewriteRule ^([^/]+)/?$ index.php?x=$1 [L]