【问题标题】:remove php extension, stop access of url with .php extension and remove trailing slashes删除 php 扩展名,停止访问带有 .php 扩展名的 url 并删除尾部斜杠
【发布时间】:2011-12-11 01:09:53
【问题描述】:

我希望我的 url 没有扩展名,所以没有 .php 扩展名,我也希望没有机会访问带有斜杠的 URL。

如果您尝试使用 .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]

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您正在向后看:您拥有的第一条规则没有“删除 php 扩展”,它将其添加到尚未拥有它的 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]
    

    编辑:在调试another similar answer 时,我意识到我之前发布的解决方案不适用于 .htaccess 文件。我已经编辑了上面的示例代码,改为使用一个相当丑陋的 kluge 来打破重定向循环。 kluge 的副作用是所有脚本都会看到一个名为 no-redirect-loop 的额外空 URL 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多