如何在不更改URL的情况下为完整路径否定模式创建RewriteRule

时间:2015-04-17 09:46:34

标签: .htaccess mod-rewrite

我可能遇到了一个小问题,即从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

我正在搜索很多,并且到处重写并没有像我的代码那样进行更改。 有谁知道如何解决它?谢谢!

1 个答案:

答案 0 :(得分:1)

我发现是什么造成了这个奇怪的问题。

最后是一个斜线。因此,如果url在结尾处没有“/”结束,则会自动添加“/”然后添加GET路径变量。

所以我做了一个规则,不带斜线的网址重定向到带斜线的网址。

RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [L]