簡體   English   中英

Url重寫沒有固定的結構

[英]Url-rewrite with no fixed structure

我有這3個網址類型:

  • site.com/page
  • site.com/page/action
  • site.com/page/action?params

“頁面”總是在這里,但另外兩個不是

怎樣才能讓它每次都以這種方式運作?

RewriteRule ^(.*)/(.*)?(.*)$ $1.php?action=$2&$3

對於這個,如果最后兩個部分不在這里,停止工作......

謝謝!

RewriteRule ^(.*)/(.*)$ $1.php?action=$2 [QSA,L]
RewriteRule ^(.*)$ $1.php [QSA,L]

你需要不止一個規則(你可以用一個但是可讀性,2個會更好。

首先,忘記查詢字符串。 您沒有操縱它, [QSA]標志可以將其附加到生成的URL。

您現在需要兩個規則,一個用於處理“action”變體,另一個用於處理頁面名稱:

RewriteRule ^[^/]+$ $0.php [L]
RewriteRule ^([^/]+)/([^/]+) $1.php?action=$2 [L,QSA]

但是 ,這將導致重寫循環。 mod_rewrite的工作方式意味着規則幾乎總是至少執行兩次,而在第二次(以及所有后續)迭代中,第一條規則將匹配重寫的URL。

所以我們需要更具體一點:

RewriteRule ^(?:(?!\.php$)[^/])+$ $0.php [L]
RewriteRule ^([^/]+)/([^/]+)$ $1.php?action=$2 [L,QSA]

此前瞻將確保第一個規則僅匹配不以.php結尾的URI。

請注意, QSA標志僅適用於第二個規則。 這是因為它只在重寫的URI改變查詢字符串時才有效 - 默認行為(當查詢字符串未被更改時)是附加原始查詢字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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