我正在尝试使用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 ... 提前致谢 劳伦斯
答案 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]