htaccess在root和子文件夹上重写index.php

时间:2012-11-03 13:29:30

标签: .htaccess mod-rewrite indexing rewrite clean-urls

我正在尝试将所有请求重定向到./index.php?site=$1,而我只想使用最后一个斜杠后面的部分。

所以我希望www.mydomain.com/firstpage成为www.mydomain.com/index.php?site=firstpage而www.mydomain.com/subfolder/anotherpage成为www.mydomain.com/subfolder/index.php?site=anotherpage

但是现在www.mydomain.com/subfolder/anotherpage变成了 www.mydomain.com/index.php?site=subfolder/anotherpage

这就是我所拥有的:

RewriteEngine on
Options +SymlinksIfOwnerMatch
RewriteBase /

RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?site=$1 [L]

如果在最后一次斜线后仅重定向零件,我该怎么办? 非常感谢你!


解:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*/)?([^/]+)$ $1index.php?site=$2 [L]

2 个答案:

答案 0 :(得分:1)

发现这个,在我看来更优雅的解决方案。这样,子文件夹的数量就无关紧要了。


解:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*/)?([^/]+)$ $1index.php?site=$2 [L]

答案 1 :(得分:0)

最后我自己找到了答案 起初我尝试在同一个RewriteCond-lines下放置更多的RewriteRules给了我服务器错误。所以我复制了子目录的RewriteCond-lines:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ $1/index.php?site=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?site=$1 [L]