我正在使用Slim构建一个网站,它建议使用以下.htaccess
代码来创建漂亮的网址:
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
.htaccess
文件位于site1
目录中,相对于文档根目录,而无需在site1
中明确放置.htaccess
。
答案 0 :(得分:2)
您需要在此规则之前使用新的重定向规则:
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]
答案 1 :(得分:1)
试试这个:
RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule ^ index.php [QSA,L]