我希望我的网址没有扩展名,因此没有 .php 扩展名,我也希望没有机会访问带有尾部斜杠的网址。
如果您尝试使用 .php 访问它,以下内容将删除 php 扩展,然后重定向到无扩展的 url
我开始编写一条规则来阻止您使用 / 和重定向进行访问,但它不起作用,有什么帮助吗?
#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]
你正在向后看事情:你的第一条规则不是“删除 php 扩展”,而是adds it到尚未包含句点的 URL(从技术上讲,任何不包含句点的 URL)。
我想你想要更多这样的东西:
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]
Edit:调试时另一个类似的答案 https://stackoverflow.com/questions/7812059/simple-301-redirect-with-variable-not-working-why/7816300#7816300,我意识到我之前发布的解决方案在 .htaccess 文件中不起作用。我编辑了上面的示例代码,使用一个相当丑陋的克鲁格来打破重定向循环。 Kluge 的一个副作用是所有脚本都会看到一个额外的空 URL 参数,名为no-redirect-loop
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)