簡體   English   中英

Apache URL重寫規則和正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM