2

我想我已经阅读了有关 htaccess 重写的所有内容,但我仍然无法对正在发生的事情做出正面或反面。我重新创建了一个工作网站,一切都很好,除了最后一个设计师做了一些疯狂的 php 东西而且他使用的所有 url 都有 ?=p(pagename) 我想将它们重写到 (pagename).php 然后将它们重定向到301 我能够获得 301 重定向作品只是无法弄清楚如何将 ?p=(pagename) 重写为 (pagename).php

4

2 回答 2

2

您希望与实际请求匹配,然后在内部将其重写回查询字符串:

RewriteEngine On

# 301 redirect to php file
RewriteCond %{THE_REQUEST} \ /\?p=([^&\ ]+)&?([^\ ]*)
RewriteRule ^ /%1.php?%2 [L,R=301]

# internally rewrite to the query string
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php$ /?p=$1 [L,QSA]
于 2013-10-07T17:04:10.507 回答
1

您需要检查 QUERY_STRING 然后应用重写规则

RewriteCond %{QUERY_STRING} ^p=(.*)$
RewriteRule ^(.*)$ http://mydomain.com/%1.php [R=301,L]

^p=(.*)$检查只有一个变量的查询字符串,如果p=pagename查询字符串中有任何其他变量,则必须对其进行修改,p=pagename&id=15等等

于 2013-10-07T17:00:01.280 回答