.htaccess RewriteRule 不起作用 apache


.htaccess RewriteRule not working apache

我有这个链接:

http://www.example.com/NEW/movie.php?name=Parker&id=1904996我希望它像这样显示:
http://www.example.com/NEW/Parker/1904996.htm

这是我的.htaccess代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)'.html$ /NEW/movie.php?name=$1&id=$2 [L]

有什么帮助吗?

您的代码中似乎与此规则相反。

DOCUMENT_ROOT/NEW/.htaccess文件中尝试以下规则:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /NEW/
# fix css/js/media links
RewriteRule ^.+?/((?:css|js|media)/.+)$ /$1 [R=302,NC,L,NE]
# remove spaces
RewriteRule "^([^ ]*) +(.*)$" $1$2 [L,R]
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /movie'.php'?name=([^&]*)&id=([^'s&]+) [NC]
RewriteRule ^ %1/%2.htm? [R=302,L,NE]
# internal forward from pretty URL to actual one
RewriteRule ^([^/]+)/([^.]+)'.html?$ movie.php?name=$1&id=$2 [L,NC,QSA,NE]

.html表示"任何字符后跟文字字符串html .然而,您希望它.htm.您可以通过在句号前面放置反斜杠来转义句点。

  • . = 任何字符
  • '. = 文字.字符

也许使用

RewriteRule ^([^/]+)/(.+)'.html?$ /NEW/movie.php?name=$1&id=$2 [L]

这将转发.html.htm(因为l应该是"重复 0 或 1 次"(。

变化:

  • [^/]+而不是[^/].加号表示"重复 1 次或更多次"。如果没有,则只允许一个不是斜杠的字符。
  • (.+)而不是[^/].由于我们不希望它一直匹配直到我们到达斜杠(因为我们不会达到斜杠(,我们使用贪婪的术语.+意思是"匹配尽可能多的字符,直到你到达下一部分(被'.html?$(。我们也可以使用[^'.]但这意味着我们不能在ID中使用任何句点。

或者,如果 ID 只能是一个数字:

RewriteRule ^([^/]+)/([1-9][0-9]*)'.html?$ /NEW/movie.php?name=$1&id=$2 [L]
[1-9][0-9]* 表示"1 到 9 之间的任何数字

,后跟 0-9 之间的任何数字,重复 0 到无穷大的时间">