.htaccess 301重定向和查询字符串

时间:2014-08-22 14:52:59

标签: regex apache .htaccess redirect

我在htaccess中无法正常使用正则表达式,我需要使用以下网址:

http://example.com/p/anything.aspx?id=1

并将其重定向到:

http://example.com/-/anything/1

我可以让它重定向到以下就好了,但是不能让它放弃?id =

http://example.com/-/anything/?id=1

我已经在regexr.com上测试了一些正则表达式,并且它们在那里工作得很好,但是当我实际将它放入我的.htaccess时它不起作用。你能给予的任何帮助都会令人惊叹!我可能会错过一些小而愚蠢的东西,只是在htaccess中使用正则表达式并不是那么好。

的.htaccess

RewriteEngine On
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]
RewriteRule ^p/([^\.]+)[\?&](\w+)=(\w+) /-/example/$3 [L,R=301]

1 个答案:

答案 0 :(得分:2)

您必须检查%{QUERY_STRING}才能捕获?id=xxx 此外,我优化了您的代码,您现在可以用这个替换当前的

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L,QSA]

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L]

RewriteCond %{QUERY_STRING} ^id=([1-9][0-9]*)$ [NC]
RewriteRule ^p/(.+)\.aspx$ /-/$1/%1? [R=301,L]