1

我希望所有具有匹配模式的 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]
4

3 回答 3

1

尾随问号匹配可选的结尾 / 这不是您想要的。

^released/([0-9]+)/iron-man$

或者

RewriteRule ^released/([0-9]+)/(.+)$ /released/1.php?id=$1+$2
于 2013-06-25T16:18:44.743 回答
1

问题是您$在第二个斜线之后有电影名称,但您在第二个斜线之后有电影名称等iron-man。删除$,因为您不匹配它。

确保通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_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]
于 2013-06-25T16:24:38.470 回答
0

RewriteRule未指定特定外部域的A始终在内部执行。要使其按照您的要求进行重定向,请[R=301]在末尾添加 - 或 302、303 或 307,具体取决于您需要哪种重定向,但通常301没问题。

除此之外,您编写的正则表达式不允许扩展 URL - 删除结尾的$. 在那之后,该/?部分没有实际意义,因此您也可以将其移除。

结果行将显示:

RewriteRule ^released/([0-9]+) /released/1.php?id=$1 [L,R=301]
于 2013-06-25T16:21:00.043 回答