我希望我的所有网址都匹配模式为
/released/2013/iron-man
/released/2013/abc-of-death
/released/2012/saw6
重定向到
/released/1.php
我也可以这个名字。
我将此规则添加到我的.htaccess文件中,但它无法正常工作
RewriteRule ^released/([0-9]+)/?$ /released/1.php?id=$1 [L]
答案 0 :(得分:1)
尾随问号与可选的结尾匹配/不是您想要的结果。
^released/([0-9]+)/iron-man$
或
RewriteRule ^released/([0-9]+)/(.+)$ /released/1.php?id=$1+$2
答案 1 :(得分:1)
问题是你在第二次斜杠后有$
,但你有第二次斜杠之后的电影名称,如iron-man
等。删除$
,因为你没有匹配它。
确保通过httpd.conf
启用了mod_rewrite和.htaccess,然后将此代码放在.htaccess
目录下的DOCUMENT_ROOT
中:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(released)/([0-9]+)/ /$1/1.php?id=$2 [L,QSA,NC]
答案 2 :(得分:0)
未指定特定外部域的RewriteRule
始终在内部执行。要在最后添加[R=301]
,或者根据您需要的重定向类型添加301
,使其重定向,但通常$
就可以了。< / p>
除此之外,您编写的正则表达式不允许扩展URL - 删除尾随/?
。之后,RewriteRule ^released/([0-9]+) /released/1.php?id=$1 [L,R=301]
部分没有实际意义,因此您也可以删除它。
结果行显示为:
{{1}}