可能我的问题与另一个标题重复但是,我读了太多标题并且用google多次检查过。所以,如果它重复,我很抱歉。
现在我有一个网址:
www.mysite.com/profile.php
我正在使用此网址重写规则:
RewriteRule ^([A-Za-z0-9-_]+)/?$ profile.php?username=$1 [NC,L]
我可以改变我的网址:
www.mysite.com/username
然后,我需要使用其他get参数更新我的url:
www.mysite.com/username/photos
在这部分,我有一个像:
这样的网址www.mysite.com/profile.php?username=xxx&w=photo
我已针对上面的网址尝试了此网址规则:
RewriteRule ^([A-Za-z0-9-_]+)/?$/?$ profile.php?username=$1&w=$2 [NC,L]
但它不起作用。请帮忙。
非常感谢。
------- ------ UPDATE
现在我可以使用它应该是的profile.php。但是其他重写规则被打破了。我当前的.htaccess文件是这样的:
RewriteEngine On
RewriteRule ^([\w-]+)/([\w-]+)/?$ profile.php?username=$1&w=$2 [QSA,L]
RewriteRule ^([\w-]+)/?$ profile.php?username=$1 [QSA,L]
RewriteRule ^p/timeline timeline.php [NC,L]
RewriteRule ^p/notifications notifications.php [NC,L]
答案 0 :(得分:1)
第一件事:
[A-Za-z0-9-_]
不是正确的正则表达式,因为字符类中9
和_
之间的非转义连字符充当十六进制39和十六进制5f之间的范围。要解决此问题,请确保在字符类的第一个或最后一个位置使用连字符。
正确的规则是:
RewriteRule ^([\w-]+)/([\w-]+)/?$ profile.php?username=$1&w=$2 [QSA,L]
RewriteRule ^([\w-]+)/?$ profile.php?username=$1 [QSA,L]
<强>更新强>
根据您更新的问题,请确保在特定规则后使用通用规则。所以你的规则是这样的:
RewriteRule ^p/(notifications|timeline)/?$ $1.php [NC,L]
RewriteRule ^([\w-]+)/([\w-]+)/?$ profile.php?username=$1&w=$2 [QSA,L]
RewriteRule ^([\w-]+)/?$ profile.php?username=$1 [QSA,L]
答案 1 :(得分:0)
RewriteRule ^([A-Za-z0-9-_]+)/(.+)$ profile.php?username=$1&w=$2 [NC,L]
RewriteRule ^([A-Za-z0-9-_]+)$ profile.php?username=$1 [NC,L]
答案 2 :(得分:0)
如果需要,您可以只有一条规则。我还会添加条件,以确保它不是真正的目录或文件。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-_]+)/?([A-Za-z0-9-_]+)?/?$ /profile.php?username=$1&w=$2 [NC,L]
在PHP中,您只需检查w
参数,看它是否为空。如果不是,也显示详细信息。