【问题标题】:HTACCESS URL Variable RewriteHTACCESS URL 变量重写
【发布时间】:2015-02-26 14:38:22
【问题描述】:
希望重写 URL,但似乎无法正常工作。
示例网址:
http://www.example.com/find/agency.php?agency=33524&name=happy-example
理想的、重写的 URL:
http://www.example.com/find/agency/happy-example
众多尝试重写之一:
RewriteRule ^/([.]+)/([.]+)$ agency.php?agency=$1&name=$2
RewriteRule ^/([.]+)/([.]+)/$ agency.php?agency=$1&name=$2
即使无法删除“agency=”变量,我似乎仍然无法让这个 URL 写出变量 - 我是否正在向后重写?
【问题讨论】:
标签:
php
apache
.htaccess
mod-rewrite
url-rewriting
【解决方案1】:
在进行重写之前尝试使用重写条件来捕获查询字符串。
例如:
RewriteCond %{QUERY_STRING} ^agency=33524&name=([^&]+)
RewriteRule ^find/agency.php$ find/agency/%1? [R=301]
【解决方案2】:
您的规则有几处错误。但是要获得这样的网址。
http://www.example.com/find/33524/happy-example
您需要使用如下所示的重写。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^find/([^/]+)/([^/]+)/?$ /agency.php?agency=$1&name=$2 [L]
【解决方案3】:
使用惰性修饰符进行符号匹配(目前([.]+) 将匹配所有内容)
RewriteRule ^/([.]+?)/([.]+?)$ agency.php?agency=$1&name=$2
RewriteRule ^/([.]+?)/([.]+?)/$ agency.php?agency=$1&name=$2
您也可以将这些组合成一个规则
RewriteRule ^/([.]+?)/([.]+?)[/]{0,1}$ agency.php?agency=$1&name=$2
这不包括根据您的具体情况需要的任何标志