Php 改写为;漂亮的网址;?

Php 改写为;漂亮的网址;?,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,这是我努力实现的一个例子 原始URL: http://subdomain.domain.com/company.php?test=TES001 Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2 ErrorDocument 404 / 重写的URL: http://subdomain.domain.com/company/AAA001

这是我努力实现的一个例子

原始URL:
http://subdomain.domain.com/company.php?test=TES001

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2
ErrorDocument 404 /
重写的URL:
http://subdomain.domain.com/company/AAA001

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2
ErrorDocument 404 /

我认为你的重写规则写得不对,有点倒退,应该是这样的

RewriteRule company.php?test=([A-Z]+)([0-9]+) /company/AAA$2

也就是说,您首先给出要匹配的模式,然后将其重写为。。。但是,我不确定您是否能够像这样匹配GET参数…

我不是mod_重写专家,但是:

RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2
不应匹配以下表达式:

/company/foo/bar/
并将其映射到:

/company.php?foo=bar
您的URL中只有:

/company/foo
Apache日志在说什么? 你的.htaccess真的被读取了吗?
你重新加载Apache配置了吗?(记不清是否需要它)

如果希望
/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

你点错菜了。。。紧跟在“RewriteRule”之后的是您想要的URL的形式(即您的干净URL),带有正则表达式,表示该URL中可能发生的任何更改。之后,您就有了URL的路径,加上找到的值(即$1、$2等)的正则表达式标记


正确的。不能像这样匹配查询字符串参数。重写规则只查看路径(最多,但不包括问号)。要匹配查询字符串,可以使用
RewriteCond%{query\u string}
。看到我的答案了。谢谢,效果很好