[英].htaccess rewrite rule not working without trailing slash?
我有以下网址:
www.website.com/index.php?section=index
www.website.com/index.php?section=freebies
www.website.com/index.php?section=deals
www.website.com/index.php?section=articles
以及每个页面的以下分页网址参数:例如page = 1
www.website.com/index.php?section=freebies&page=1
我正在使用以下重写规则将URL更改为:
www.website.com/freebies/1 etc
www.website.com/freebies/1
和www.website.com/freebies/
可以正常运行,但是如果我删除了斜杠,例如:
www.website.com/freebies
它显示了www.website.com/freebies/?section=freebies&page=1
我该如何阻止这种情况的发生。
我的重写规则:
RewriteRule ^([0-9]+)/?$ index.php?section=index&page=$1 [NC,L]
RewriteRule ^freebies/?$ index.php?section=freebies&page=1 [L]
RewriteRule ^articles/?$ index.php?section=articles&page=1 [L]
RewriteRule ^deals/?$ index.php?section=deals&page=1 [L]
RewriteRule ^freebies/([0-9]+)/?$ index.php?section=freebies&page=$1 [NC,L]
RewriteRule ^articles/([0-9]+)/?$ index.php?section=articles&page=$1 [NC,L]
RewriteRule ^deals/([0-9]+)/?$ index.php?section=deals&page=$1 [NC,L]
如果我理解正确,则始终需要用斜杠结尾,因此您的规则始终有效。
如果是这样,请在现有规则上方添加以下内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
或者,如果这对您不起作用,请检查其他添加尾部斜杠的技术。
侧面提示:
您现有的htacces规则
RewriteRule ^freebies/?$ index.php?section=freebies&page=1 [L]
RewriteRule ^articles/?$ index.php?section=articles&page=1 [L]
RewriteRule ^deals/?$ index.php?section=deals&page=1 [L]
可以通过以下一条规则来简化:
RewriteRule ^(freebies|articles|deals)/?$ index.php?section=$1&page=1 [L]
编辑:
可以按照您的要求进行操作(使用斜线和不使用斜线)。 我认为类似这样的方法可以达到目的(未经测试):
RewriteRule ^freebies/?$ index.php?section=freebies&page=1
(注意斜线后的?)
另外,请阅读https://webmasters.googleblog.com/2010/04/to-slash-or-not-to-slash.html ),以检查G如何处理这些情况。
freebies
似乎是真实目录,Apache的mod_dir
模块在目录后添加斜杠会导致重定向,从而将您的内部URL暴露给客户端。
您可以使用:
RewriteEngine On
# internally add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L]
RewriteRule ^([0-9]+)/?$ index.php?section=index&page=$1 [NC,L,QSA]
RewriteRule ^freebies/?$ index.php?section=freebies&page=1 [L,NC,QSA]
RewriteRule ^articles/?$ index.php?section=articles&page=1 [L,NC,QSA]
RewriteRule ^deals/?$ index.php?section=deals&page=1 [L,QSA,NC]
RewriteRule ^freebies/([0-9]+)/?$ index.php?section=freebies&page=$1 [NC,L,QSA]
RewriteRule ^articles/([0-9]+)/?$ index.php?section=articles&page=$1 [NC,L,QSA]
RewriteRule ^deals/([0-9]+)/?$ index.php?section=deals&page=$1 [NC,L,QSA]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.