Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess重写规则在没有尾部斜杠的情况下不起作用?_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php .htaccess重写规则在没有尾部斜杠的情况下不起作用?

Php .htaccess重写规则在没有尾部斜杠的情况下不起作用?,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我有以下网址: 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 以及每个的以下分页url参数: 页码=1 比如说 www.website.com/index.php?section=freebies&pag

我有以下网址:

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
以及每个的以下分页url参数: 页码=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]
编辑:
可以按您的要求执行(使用斜杠和不使用斜杠)。我认为这样做会奏效(未经测试):

(请注意斜线后的?号)


另外,阅读)以检查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]

感谢您的快速响应:)是否可以在不强制使用尾部斜杠的情况下执行此操作。例如,“www.website.com/freebies”和“www.website.com/freebies/”都重定向到“index.php?section=freebies&page=1”重写规则^freebies/?$index.php?section=freebies&page=1是我正在使用的重写规则,但我遇到的问题是,当我转到“www.website.com/freebies”时,URL在浏览器中显示为“www.website.com/freebies/?section=freebies&page=1”。只有当我进入带有尾随斜杠的“www.website.com/freebies/”时,它才能正常工作?Anubhava的回答解决了这个问题,谢谢你简化了重写规则:)谢谢,这就是问题所在,我有一个freebies、deals和articles文件夹,但没有意识到它会这样。谢谢:)
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]