mod_rewrite不适合我

时间:2012-04-24 10:07:45

标签: database apache mod-rewrite apache2

我正在尝试使用apache为网站设置mod_rewrite

这是我的一句话:

RewriteEngine on
RewriteRule ^news/Actualites/([^/]+)/?$ news/Actualites_d.tpl?SKU=$1 [L]

但它不起作用

我有其他重写工作,我测试了一些简单的东西:

RewriteEngine on
RewriteRule ^ancienne-url\.html$ /nouvelle-url.html [R=301,L]

这是有效的。

我试图把它放在Htaccess和Vhost中,两者都不起作用。

我还希望得到以下内容

news/Actualites/MYPRODUCT当我有news/Actualites_d.tpl?SKU=MYNUMERIC_ID

这样的网址时

我不知道是否有可能在一侧有“单词”,当它正常时,侧面的数字ID ... 提前致谢 劳伦斯

2 个答案:

答案 0 :(得分:0)

尝试:

RewriteEngine on
RewriteBase /
RewriteRule ^news/Actualites/([^/]+)/?$ news/Actualites_d.tpl?SKU=$1 [NC,QSA,L]

问题的第一部分。

对于第二部分,您可以使用RewriteRule实现它,但这意味着对所有URL进行硬编码,这不是一个好主意。

RewriteRule ^news/Actualites/MYPRODUCT$ news/Actualites_d.tpl?SKU=MYNUMERIC_ID [NC,QSA,L]

然后你需要复制上面一行代替每个不同网址的MYPRODUCT和MYPRODUCT_ID。

在这种情况下,您通常会采用以下规则:

RewriteRule ^news/Actualites/([^/]+)$ news/Actualites_d.tpl?SKU=$1 [NC,QSA,L]

并且actualites_d.tpl脚本将查询数据库或其他任何内容以获取传入的URL值所需的信息:

SELECT * FROM tbdProduct WHERE fldProductURLSlug = SKU

答案 1 :(得分:0)

因此,您的重写规则存在一些问题,作为一般做法,通常最好添加完整的URL以防止循环本地重写。第二个问题是你的重写规则是期望URL以新闻开头......但实际上它是/新闻所以为了修复兼容性它应该或多或少看起来像:

RewriteRule ^/?news/Actualites/(.*)/.*$ http://{$HTTP_HOST}/news/Actualites_d.tpl?SKU=$1 [R=301,L]

在这个例子中你会看到我添加了/和a?在重写规则的开头,即为/未设置时的兼容性。其次,您将看到(。*)圆括号表示变量赋值,您可以设置其中的多个,然后将它们与$ 1 $ 2一起使用,依此类推。最后,我将重定向位置设置为301重定向。使用RewriteBase是无关紧要的,除非您在别名目录下服务,例如/ blog /

上一个示例将RewriteBase设置为/,然后为^ news执行重写规则。但是,这并没有考虑到您可能收到的一些排除起始斜杠的请求。

完整性的另一个例子是:

RewriteRule ^/?news/Actualites/(.*)/(.*)/(.*)/.*$ http://{$HTTP_HOST}/news/Actualites_d.tpl?SKU=$1&orderid=$2&somvar=$3 [R=301,L]