这是我想要实现的一个例子。
原始网址:
http://subdomain.domain.com/company.php?test=TES001
重写的网址:
http://subdomain.domain.com/company/AAA001
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2
ErrorDocument 404 /
答案 0 :(得分:1)
我认为你的RewriteRule是以错误的方式编写的,有点倒退,应该是
RewriteRule company.php?test=([A-Z]+)([0-9]+) /company/AAA$2
即。你首先给出匹配的模式,然后重写它的内容...但是我不确定你是否真的可以像这样匹配GET参数......
答案 1 :(得分:1)
如果您希望/company.php?test=AAA001
重定向到/company/AAA001
,请执行以下操作:
RewriteCond %{QUERY_STRING} test=([A-Z]+[0-9]+)
RewriteRule ^company.php /company/%1? [R]
如果您希望将/company/AAA001
重写为/company.php?test=AAA001
,请执行以下操作:
RewriteRule company/([A-Z]+[0-9]+)$ /company.php?test=$1
答案 2 :(得分:0)
我不是mod_rewrite专家,但是:
RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2
不应与以下表达式匹配:
/company/foo/bar/
并将它们映射到:
/company.php?foo=bar
您的网址中只有:
/company/foo
Apache日志说什么? 你的.htaccess真的读了吗? 你重新加载Apache配置了吗? (不记得是否需要)
答案 3 :(得分:0)
您的订单错误...在“RewriteRule”之后立即显示您想要的URL的形式(即您的干净网址),并使用正则表达式替换该网址中的任何内容。之后,您将获得URL的路径,以及找到的值的正则表达式标记(即$ 1,$ 2等)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
ErrorDocument 400 http://www.domain.com/400
ErrorDocument 403 http://www.domain.com/403
ErrorDocument 404 http://www.domain.com/404
ErrorDocument 500 http://www.domain.com/500
RewriteEngine on
RewriteBase /
#PAGES
RewriteRule ^/company/([A-Z]+)([0-9]+)/$ company.php?test=$1&%{QUERY_STRING} [NC,L]