.htaccess RewriteRule无法运行apache

时间:2013-11-21 15:12:49

标签: php regex apache .htaccess mod-rewrite

我有这个链接:
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]

有任何帮助吗?

2 个答案:

答案 0 :(得分:2)

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

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]

答案 1 :(得分:1)

.html表示“字符串html后面跟着的任何字符。但是你希望它是.htm。你可以通过在它前面放一个反斜杠来逃避这段时间。< / p>

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

也许使用

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到无穷大时间之间的任何数字”