.htaccess mod_rewrite问题 - 在脚下射击自己?

时间:2009-09-28 19:13:17

标签: .htaccess mod-rewrite url-rewriting friendly-url

我有一个名为category.php5的页面,它使用$ _GET [“category”]从数据库中获取正确的内容。我想要漂亮起来所以看起来像:

sinaesthesia.co.uk/category/psoriasis

等于:

sinaesthesia.co.uk/category.php5?category=psoriasis

我之前已成功完成了这种重写,但由于我现在无法让它工作,我担心我可能会制定一些规则,这些规则会让我感到困惑。这是我的整个.htaccess文件 - 最后几行应该进行上述重写:

RewriteEngine On

#remember to change this to aromaclear
RewriteCond %{HTTP_HOST} !^sinaesthesia\.co.uk$ [NC]
RewriteRule ^(.*)$ http://sinaesthesia.co.uk/$1 [R=301,L]

#Translate default page to root
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php5|html)\ HTTP
RewriteRule ^(.*)index\.(php5|html)$ /$1 [R=301,L]

#translate any .html ending into .php5
RewriteRule ^(.*)\.html$ /$1\.php5

#change / for ?
RewriteRule ^(.*)\.html/(.*)$ /$1\.html?$2

#strip .html from search res page
RewriteRule ^(.*)search/(.*)$ /$1search_results\.html/search=$2

#translate product details link from search res page
RewriteRule ^products/(.*)/(.*)/(.*)$ /product_details.php5?category=$1&title=$2&id=$3 [L]

#Translate products/psorisis/chamomile-skin-cream-P[x] to productview.php5?id=1
RewriteRule ^products/.*-P([0-9]+) /productview.php5?id=$1 [L]

#Translate /category/psoriasis to /category.php5?category=$1
RewriteRule ^category/(.*) /category.php5?category=$1 [L]

当我手动输入category.php5 / category = psoriasis时,效果很好。当我输入category.php5 / category / psoriasis时,它不会。我担心我的行改变了html /到html?是一个错误,但是当我拿出那条线时,它仍然不起作用。其他一切都按预期工作。

2 个答案:

答案 0 :(得分:1)

作为一般策略,通过评论所有内容来删除文件,然后逐个重新启用,直到找到导致其中断的规则。

请记住,浏览器有时会缓存重定向,因此启动一个新的浏览器实例是一个好主意。一个有用的服务是http://web-sniffer.net/,它将为您提供未缓存的结果。

一般来说,看一下你的重定向,这对我来说似乎有点费解,因为你似乎正在使用链式/筛网式系统。相反,我建议从可以明确标识的网址开始,例如,从

开始
RewriteRule ^category/(.*) /category.php5?category=$1 [L]

然后离开相当混乱的.html => .php转换到最后的东西,如果你最终需要它。我已经使用重定向完成了很多网站,并且从未需要像这样的泛型转换,所以它们应该是可以避免的。

另外请记住。*表示匹配或任何的任何内容,因此您可能希望使用。+而不是。

答案 1 :(得分:0)

啊:因为我有一个名为category.php5的文件而我正在尝试使用category / psoriasis,服务器会尝试将其解析为category.php5 / psoriasis,但失败了。现在修好了!