重写为“漂亮的网址”?

时间:2010-02-11 16:19:00

标签: php apache .htaccess mod-rewrite

这是我想要实现的一个例子。

原始网址:
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 /

4 个答案:

答案 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]