【问题标题】:How to prevent trailing slash on 404ing URLs that end with an extension in .htaccess?如何防止以 .htaccess 中的扩展名结尾的 404ing URL 上的斜杠?
【发布时间】:2017-01-02 18:47:38
【问题描述】:

如果服务器上存在带有扩展名的 URL,则它们会正确解析,但如果它们不存在,则它们会 404,这是意料之中的,但是 404'd URL 会得到一个尾部斜杠。有什么办法可以防止这些 404 网址上的斜杠吗?

下面是我安装的 Wordpress 根目录中的 .htaccess 文件。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# BEGIN MainWP
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/plugins/mainwp-child/(.*)$ /wp-content/plugins/THIS_PLUGIN_DOES_NOT_EXIST [QSA,L]
</IfModule>
# END MainWP
Options -MultiViews

【问题讨论】:

    标签: wordpress .htaccess


    【解决方案1】:

    为了防止尾部斜杠被添加到以扩展名结尾的 URL,然后看起来你可以添加另一个 条件(即RewriteCond 指令)以排除此类文件具有斜线附加和重定向。

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
    

    因此,为了防止以.html.php 结尾的网址被处理:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !.+\.(html|php)$
    RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
    

    请注意,您需要清除所有中间缓存,因为之前的 301 将被浏览器缓存。

    要处理 任何扩展名(比如说 2 到 4 个字符),那么您也许可以执行以下操作:

    RewriteCond %{REQUEST_URI} !.+\.[a-z]{2,4}$
    

    【讨论】:

    • 没有骰子。在我的 .htaccess 文件的最后尝试了第一个和第二个。
    • @Mattypants 抱歉,正则表达式应该被否定! IE。正则表达式应该有一个 ! 前缀。我已经更新了我的答案。
    • ...并确保在进行此更改后清除浏览器缓存。
    • 进行了更改,清除了缓存,但仍然没有骰子。
    • "在我的 .htaccess 文件的最后" - 上面的指令应该在你的文件的最开始,和你的问题一样。 (?)这些指令只是修改你已经拥有的东西,没有什么新东西。如果你把它们放在最后,它们将永远不会被处理。
    猜你喜欢
    • 2012-04-15
    • 2011-11-13
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多