对根和子文件夹的htaccess重写的index.php(htaccess rewrite inde

2019-08-02 06:32发布

我想重定向所有请求./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]

Answer 1:

发现这个其他的,在我看来,更优雅的解决方案。 由此,子文件夹的数量无关。


解:

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


Answer 2:

终于想通了自己的答案。
起初,我试图把更多的RewriteRules在相同的RewriteCond线给我的服务器错误。 所以我复制了的RewriteCond线的子目录:

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]


文章来源: htaccess rewrite index.php on root and subfolders