我将要更新我的站点以使用cakephp,而不是使用国产的旧框架。我需要编写htaccess文件来将旧的php参数url重定向到新的cakephp seo友好的url,但是我不能让它工作。
我的htaces文件(app/webroot中的文件)目前看起来如下:
RewriteEngine On
RewriteRule ^index.php?action=view&item=172$ index.php?url=item/172 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
它不起作用。我试着移除L,只是把它重定向到项目/172,但也没用。当前的一个以url参数unset结束,如果我在$_server['request_uri']中查找,它是不变的。尽管我不知道国防部重写是否会改变这一点。我的重写规则似乎没有激活,即使它是直接从我的浏览器的URL栏复制的。我试过了,但没有领先。
/
. 没有骰子。
这是怎么回事?
如何编写更通用的URL来进行转换?我尝试了如下方法:
RewriteRule ^index.php?action=view&item=([0-9]+)$ index.php?url=items/$1 [R=301,L]
但这也不管用。我做错什么了?
编辑
这真让人恼火。
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]
那就行了。它将所有URL导入到正确形成的cake URL中。然后哪个蛋糕的处理器会拿起并处理。我不知道它怎么会错过蛋糕的第二条重写规则,但它确实错过了。尝试此操作:
RewriteRule ^(.*)$ item/172 [R=301]
返回格式错误的重定向,与在前一个重定向上指定最后一个重定向一样:
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301,L]
这说明它永远无法完成。
所以我真的很困惑为什么这一个:
rewriterule^(.*)$/index.php?url=item/172[r=301]
返回正确的cake url,但它会返回并发送到正确的页面。然而,
一旦我试图改变第一部分,它就开始失败。
等一下。当它击中
?
它开始失败。它成功匹配
index.php
但不是
index.php?
但逃走没有什么区别。
RewriteRule ^index.php\?$ /index.php?url=item/172 [R=301]
无法匹配或返回正确的URL。而且它似乎也不符合蛋糕的正常捕获方式,因为
$_GET['url']
是空的。如何在mod重写中转义参数字符以匹配字面?