[英]Apache URL rewrite rule and regex
可能我的問題與其他標題重復,但是,我讀了太多標題,並與Google進行了多次核對。 因此,如果重復,對不起。
現在我有一個URL:
www.mysite.com/profile.php
我正在使用以下URL重寫規則:
RewriteRule ^([A-Za-z0-9-_]+)/?$ profile.php?username=$1 [NC,L]
而且我可以像這樣更改我的網址:
www.mysite.com/username
然后,我需要使用另一個get參數更新我的網址:
www.mysite.com/username/photos
在這一部分,我有一個類似的URL:
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]
首先第一件事:
[A-Za-z0-9-_]
之所以不是正確的正則表達式,是因為在字符類(介於十六進制39和5f之間)中的9
和_
之間沒有連字符。 要解決此問題,請確保在字符類的第一個或最后一個位置使用連字符。
正確的規則將是:
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]
RewriteRule ^([A-Za-z0-9-_]+)/(.+)$ profile.php?username=$1&w=$2 [NC,L]
RewriteRule ^([A-Za-z0-9-_]+)$ profile.php?username=$1 [NC,L]
如果需要,您可以只有一條規則。 我還將添加條件,以確保它不是真實目錄或文件。
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
參數以查看其是否為空。 如果不是,請同時顯示詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.