我可能遇到了一个小问题,即从A到B的重定向而不更改URL(仍为A)并将A作为GET变量发送。第二件事是检查A是否不像/ news .....
例如:
用户访问网址:www.custom.com/news
并且重写在此处不执行任何操作,但如果用户访问网址:www.custom.com/something/abc
,则会将其重定向到www.custom.com/router.php?path=/something/abc
,用户的可见网址仍为www.custom.com/something/abc
现在,我有这样的规则:
RewriteRule !^(/news.*)$ /router.php?path=$1 [NS,R=301,L]
但它没有完成这项工作,它为无限循环创建和错误(ERR_TOO_MANY_REDIRECTS)
你能给我一些如何解决我问题的建议吗?
编辑。
我已经改变了规则并添加了RewriteCond,但仍然存在无限循环。这有什么不对?
RewriteCond %{REQUEST_URI} !^/news.*$
RewriteCond %{REQUEST_URI} !^/router\.php.*$
RewriteRule ^(.*)$ /router.php?path=$1 [NS,R=301,L]
EDIT2。
上面的代码现在有效(我已从条件规则中删除了转义字符),但redrect仍然将网址更改为www.sample.com/router.php=something/abc
编辑3:
我想知道为什么我的路线显示有点奇怪,我找到了解决方案。
首先,这是重定向在无限循环中,这就是为什么我有www.sample.com/router.php?path=something/abc
而不是www.sample.com/something/abc
(它循环两次并将router.php保存为最后一个URI)。
第二件事是我有L-flag我应该使用它...而且我添加了NC-flag以确保一切都会重定向。
这是我的代码,如果它可以帮助某人:
RewriteCond %{REQUEST_URI} !^/news.*$
RewriteCond %{REQUEST_URI} !^/assets.*$
RewriteCond %{REQUEST_URI} !^/images.*$
RewriteCond %{REQUEST_URI} !^/router.php.*$
RewriteRule ^(.*)$ /router.php?path=$1 [NC]
感谢CBroe的帮助!
编辑4:
我认为一切都很好,但现在我发现当我输入一个URL:www.sample.com/abc
然后按Enter键重写到router.php并且不会更改URL,所以它仍然是{{1} }。
但是当我使用href的链接时:www.sample.com/abc
它会重写为router.php,但URL也会被更改!点击链接后,它会将网址更改为:www.sample.com/abc
,我仍然希望www.sample.com/abc?path=abc
我正在搜索很多,并且到处重写并没有像我的代码那样进行更改。 有谁知道如何解决它?谢谢!
答案 0 :(得分:1)
我发现是什么造成了这个奇怪的问题。
最后是一个斜线。因此,如果url在结尾处没有“/”结束,则会自动添加“/”然后添加GET路径变量。
所以我做了一个规则,不带斜线的网址重定向到带斜线的网址。
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [L]