带有扩展名的网址如果存在于服务器上,则会正确解析,但如果它们不存在,则为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
答案 0 :(得分:1)
为防止将斜杠添加到以扩展名结尾的网址,您似乎可以添加另一个条件(即。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]
结尾的网址被处理:
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>>