删除php扩展,停止使用.php扩展名访问url并删除尾部斜杠

时间:2011-10-19 15:29:01

标签: .htaccess mod-rewrite url-rewriting

我希望我的网址是无扩展名的,所以没有.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]

1 个答案:

答案 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参数。