我有这个链接:
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]
有任何帮助吗?
答案 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到无穷大时间之间的任何数字”