我有以下网址
http://www.***.org/aaddress.php?state=nm&office_id=852&office_name=CLOVIS&state_name=New%20Mexico
我想将其更改为以下网址
http://www.*****.org/aaddress-state-nm-office_id-852-office_name-CLOVIS-state_New%20Mexico.php
我在下面使用了 htaccess 代码
Options +FollowSymLinks
RewriteEngine on
RewriteRule aaddress-state-(.*)-office_id-(.*)-office_name-(.*)-state_name-(.*)'.php aaddress.php?state=$1&office_id=$2&office_name=$3&state_name=$4
它不起作用,当我单击写入时,地址没有转换为.php页面
我在页面内的链接作为第一个链接,并希望将其更改为.php链接
使用它,
RewriteRule ^aaddress-state-([^-]+)-office_id-([^-]+)-office_name-([^-]+)-state_name-([^'.]+)'.php$ aaddress.php?state=$1&office_id=$2&office_name=$3&state_name=$4
^
和 $
将匹配整个 URL,除非遇到-
,否则[^-]+
将匹配任何内容。除非遇到.
,否则[^'.]+
会匹配任何东西。
这将匹配aaddress-state-nm-office_id-852-office_name-CLOVIS-state_name-New Mexico.php
但不是aaddress-state-nm-office_id-852-office_name-CLOVIS-state_New Mexico.php
.请注意后面的 URL 中缺少name-
部分state_New Mexico
。
试试这个:
RewriteRule ^aaddress-state-(.*)-office_id-(.*)-office_name-(.*)-state_name-(.*)'.php aaddress.php?state=$1&office_id=$2&office_name=$3&state_name=$4 [QSA,L]
这是一个基于递归的通用解决方案,无论您的查询字符串有多长,它都可以工作。
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
RewriteRule ^aaddress'.php$ aaddress-%{QUERY_STRING} [L]
RewriteRule ^([^&]+)&([^&]+)(&.*)?$ $1-$2$3 [L]
RewriteRule ^([^&])& $1 [L]
RewriteRule ^([^=]+)=([^=]+)(=.*)?$ $1-$2$3 [L]
RewriteRule ^([^=])= $1 [L]
这会在内部将您的示例 URL 重定向到:通过将查询字符串的每个&
和=
替换为连字符-
来/aaddress-state-nm-office_id-852-office_name-CLOVIS-state_name-New+Mexico
。