[英].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
。
這非常有效,但仍然存在兩個小故障:
無論如何,第二個塊中的第三行(我#評論了它)都不匹配。 奇怪的是它確實在第四行上工作,即我的頁面實際上顯示正常。 這是否意味着-f
參數在這里是錯誤的?
如果我輸入任何以/
結尾的網址(僅第二個塊,它與索引文件一起工作),我的重寫將被破壞,即輸出為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)(/.*?)/?$
在RewriteCond
和RewriteRule
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.