我使用CakePHP重写了我的网络应用程序,但现在我需要将旧的格式化网址重定向到我的新网址格式。我似乎无法添加自己的自定义mod重写规则。我已将它添加到主要的cakephp重写规则之上,但我得到了一个无限重定向循环。我只是希望http://mysite.com/index.php?action=showstream&nickname=user在cakephp重写发生之前重定向到http://mysite.com/user。
编辑:好的,所以现在当条件满足时,它会重定向,但它会将原始查询字符串附加到结尾。我假设这是由于CakePHP重写规则中的QSA标志,但我的印象是我的规则中的“L”会阻止执行......
RewriteEngine On
RewriteCond %{QUERY_STRING} ^action\=showstream&nickname\=(.*)$
RewriteRule ^.*$ http://mysite.com/%1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
答案 0 :(得分:1)
当您在RewriteCond行内而不是RewriteRule中进行捕获时,您必须使用%N而不是$ N来引用捕获。也就是说,你的RewriteRule行应该是:
RewriteRule ^index.php$ /%1 [R=301,L]
答案 1 :(得分:1)
尝试测试请求行(THE_REQUEST
)以查看最初请求的URI:
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /index\.php
RewriteCond %{QUERY_STRING} ^action=showstream&nickname=([^&]*)$
RewriteRule ^index\.php$ /%1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?url=$0 [QSA,L]
但也许用PHP做起来会更容易。