我希望我的网址是无扩展名的,所以没有.php扩展名,我也希望没有机会使用尾部斜杠访问该网址。
如果您尝试使用.php访问它,以下删除php扩展并将thens重定向到无扩展名网址
我开始编写规则来阻止您使用/和重定向进行访问,但它不起作用,有什么帮助吗?
#this removes php extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
# stops you accessing url with.php
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^.?\ ]+)\.php
RewriteRule ^([^.]+)\.php(/.+)?$ /$1%{PATH_INFO} [R=301]
# stops you accessing url with / **DOESNT WORK**
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ /$1 [R=301,L]
答案 0 :(得分:2)
你正在向后看事情:你的第一条规则并没有“删除php扩展”,它将添加到尚未拥有它的网址(技术上,任何不包含句号)。
我想你想要更像这样的东西:
RewriteEngine On
RewriteBase /
# Remove .php from any URLs that contain it, using an external 301 redirect
RewriteCond %{QUERY_STRING} !^no-redirect-loop(&|$)
RewriteRule ^(.*)\.php$ $1 [NS,R=301,L]
# Now add it back internally
RewriteCond %{QUERY_STRING} !^no-redirect-loop(&|$)
RewriteRule ^(.*)$ $1.php?no-redirect-loop [NS,QSA]
编辑:在调试another similar answer时,我意识到我在此处发布的上一个解决方案无法在.htaccess文件中运行。我编辑了上面的示例代码,使用一个相当难看的kluge来破坏重定向循环。 kluge的副作用是所有脚本都会看到一个名为no-redirect-loop
的额外空URL参数。