Php 301重定向也正在重写的URL
我正在使用Slim构建一个站点,它建议使用以下Php 301重定向也正在重写的URL,php,.htaccess,mod-rewrite,redirect,slim,Php,.htaccess,Mod Rewrite,Redirect,Slim,我正在使用Slim构建一个站点,它建议使用以下.htaccess代码创建漂亮的URL: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] 这意味着像http://example.com/account/login将别名用于http://example.com/index.php/account/login,然后由我的前端控制器处理。到目前为止还不错 但是,如果有人明确导航到 http://example.co
.htaccess
代码创建漂亮的URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
这意味着像http://example.com/account/login
将别名用于http://example.com/index.php/account/login
,然后由我的前端控制器处理。到目前为止还不错
但是,如果有人明确导航到
http://example.com/index.php/account/login
我希望它首先重定向到:
http://example.com/account/login
和然后的别名
http://example.com/index.php/account/login
这样,用户将看到http://example.com/account/login
在他们的导航栏中
如何在.htaccess
中同时处理这两个规则,最重要的是,不必对主机和域进行硬编码(http://example.com.htaccess
中的
)
这也应适用于子目录,例如:
http://example.com/site1/index.php/account/login
->
http://example.com/site1/account/login
使用相对于文档根目录位于site1
目录中的.htaccess
文件,无需将site1
显式放入.htaccess
试试这个:
RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
在此规则之前,您需要一个新的重定向规则:
RewriteEngine On
RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$
RewriteRule ^.*$ - [E=BASE:%2]
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^index\.php(?:/(.*))?$ %{ENV:BASE}$1 [L,R=302,NC,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
你会认为这很简单,但唉……不:(嗯,我在另一个问题中看到了你的答案,但它似乎对我不起作用。如果我在
重写规则
模式的开头有^
,那不是要从一开始就尝试匹配URL吗?这个答案实际上是正确的-不确定你所说的在一开始匹配URL是什么意思…难道不是吗重定向?这适用于http://localhost/index.php/blah
,但不是http://localhost/site1/index.php/blah
(假设我的.htaccess
文件位于相对于我的文档根目录的/site1
目录中)。如果.htaccess位于site1
中,则需要一个RewriteBase
(请参阅更新的规则)。是否有办法对基本项进行正则表达式匹配?否则,我的软件的每个用户都需要分别配置他们的.htaccess
。我不想增加额外的复杂性。