如何防止以.htaccess中的扩展名结尾的404ing URL上的尾部斜杠?

时间:2017-01-02 18:47:38

标签: wordpress .htaccess

带有扩展名的网址如果存在于服务器上,则会正确解析,但如果它们不存在,则为404,这是预期的,但404'd的网址会得到一个尾随斜杠。有没有办法阻止那些404'ing URL上的斜杠呢?

下面是我的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

1 个答案:

答案 0 :(得分:1)

为防止将斜杠添加到以扩展名结尾的网址,您似乎可以添加另一个条件(即。RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301] 指令)以排除此类文件有一个斜杠附加和重定向。

.html

因此,要防止以.phpRewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !.+\.(html|php)$ RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301] 结尾的网址被处理:

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

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

要处理任何扩展(比如2到4个字符之间),那么你可能会做类似的事情:

select p,q,r from a,b
where a.f1=b.f2
and a.X=code1 <<if only code1 is passed>>
and a.X in (code1,code2)  <<if both code1 and code2 are passed>>

or 

select p,q,r from a,b
where a.f1=b.f2

<<if no value is passed>>