我希望所有具有匹配模式的 URL 为
/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]
尾随问号匹配可选的结尾 / 这不是您想要的。
^released/([0-9]+)/iron-man$
或者
RewriteRule ^released/([0-9]+)/(.+)$ /released/1.php?id=$1+$2
问题是您$
在第二个斜线之后有电影名称,但您在第二个斜线之后有电影名称等iron-man
。删除$
,因为您不匹配它。
确保通过启用 mod_rewrite 和 .htaccess httpd.conf
,然后将此代码放在您.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]
RewriteRule
未指定特定外部域的A始终在内部执行。要使其按照您的要求进行重定向,请[R=301]
在末尾添加 - 或 302、303 或 307,具体取决于您需要哪种重定向,但通常301
没问题。
除此之外,您编写的正则表达式不允许扩展 URL - 删除结尾的$
. 在那之后,该/?
部分没有实际意义,因此您也可以将其移除。
结果行将显示:
RewriteRule ^released/([0-9]+) /released/1.php?id=$1 [L,R=301]