繁体   English   中英

.htaccess重写规则在不带斜杠的情况下不起作用?

[英].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/1www.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM