htaccess url重写为.php

htaccess url重写为.php,php,.htaccess,Php,.htaccess,我有下面的网址 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 我想把它改成下面的url http://www.***.org/aad

我有下面的网址

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
我想把它改成下面的url

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
我使用了下面的访问代码

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 [QSA,L]
用这个,

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\u id-852-office\u name-CLOVIS-state\u name-New Mexico.php

但是不是
aaddress-state-nm-office\u id-852-office\u name-CLOVIS-state\u New Mexico.php
注意在后面的URL中,新墨西哥州缺少的
名称-
部分。

这是一个基于递归的通用解决方案
,无论查询字符串有多长都有效

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\u id-852-office\u name-CLOVIS-state\u name-New+Mexico
,方法是将查询字符串的
&
=
替换为连字符
-

谢谢您的回复,但它仍然不起作用:(感谢您的回复,仍然有相同的问题,url显示为它,没有任何更改。请参阅我的更新。您正在传递
状态
,但匹配
状态
。再次感谢,我还无法实现此目标,有一些错误,但我还无法发现它。+1对于有趣的问题,我将尝试提出一个合适的答案。tha谢谢你,我会尽快试试这个