簡體   English   中英

.htaccess RewriteCond小問題

[英].htaccess RewriteCond small issue

感謝@Ωmega,我幾乎完全解決了我以前的問題(在.htaccess正則表達式問題上有詳細信息),並得出了以下解決方案:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/|)$ [NC]
RewriteCond %1%3index.php -f
RewriteRule ^(.*/|)(en|de|fr)(/|)$ index.php?lang=$2 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/.*|)$ [NC]
#RewriteCond $1$3.php -f
RewriteRule ^(.*/|)(en|de|fr)(/.*|)$ $1$3.php?lang=$2 [NC,QSA,L]

基本上,這些行會將domain/language/sub/.../somepage形式的任何內容重寫為domain/sub/.../somepage.php?lang=language 第一個塊用於domain/language/形式的url,帶或不帶結尾/ URL,都將重定向到index.php

這非常有效,但仍然存在兩個小故障:

  1. 無論如何,第二個塊中的第三行(我#評論了它)都不匹配。 奇怪的是它確實在第四行上工作,即我的頁面實際上顯示正常。 這是否意味着-f參數在這里是錯誤的?

  2. 如果我輸入任何以/結尾的網址(僅第二個塊,它與索引文件一起工作),我的重寫將被破壞,即輸出為domain/language/sub/.../ somepage/.php是否有任何排除方法一個潛在的/在正則表達式在輸入的網址?

感謝您的反饋意見 !

無論如何,第二個塊中的第三行(我#評論了它)都不匹配。 奇怪的是它確實在第四行上工作,即我的頁面實際上顯示正常。 這是否意味着-f參數在這里是錯誤的?

您使用了錯誤的反向引用。 您需要%1和%3:

RewriteCond %1%3.php -f

如果我輸入任何以/結尾的網址(僅第二個塊,它與索引文件一起工作),我的重寫將被破壞,即輸出為domain / language / sub /.../ somepage / .php是否有任何排除方法用正則表達式輸入的URL中是否有可能?

是的,您可以嘗試將正則表達式從^(.*/|)(en|de|fr)(/.*|)$更改為^(.*/|)(en|de|fr)(/.*?)/?$RewriteCondRewriteRule

暫無
暫無

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

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