[英]PHP .htaccess removing .php extension and language directory to parameter
我正在尋找PHP服務器中.htaccess
文件的regulair表達式。
我想要的是它從第一個目錄中檢測語言作為參數:
任何其他選項都必須視為目錄或文件名。 語言必須作為參數提供,而不會破壞任何其他參數。
我也想最后/
替換為.php
。
一些例子:
host.com/nl/index/ -> host.com/index.php?lang=nl
host.com/de/test/abc/ -> host.com/test/abc.php?lang=de
host.com/be/a/b/c/?t=23 -> host.com/a/b/c.php?lang=be&t=23
這可能嗎? 我無法正常工作,希望有人能幫助我!
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule >>> requested expression and replacing pattern <<<
</IfModule>
RewriteRule ^/([a-z]{2})(/.+)/?$ $2.php?lang=$1 [QSA]
通過一次考慮正則表達式,最容易解釋正則表達式。 讓我們分解一下:
^
-URL的開頭 /
-匹配第一個斜杠 ([az]{2})
-匹配並捕獲2個字母(進入$1
變量) (
-開始捕獲組(進入$2
) /
-匹配一個斜杠 .+
-匹配零個或多個字符 )
-結束捕獲組( $2
) /?
-匹配“文件路徑”的可選斜杠(但不要捕獲) $
-網址結尾 因此,您要捕獲兩件事:
1 。 語言 (捕獲組$1
):
([a-z]{2})
2 。 文件路徑 ,以斜杠(捕獲組$2
)開頭,后跟可選的斜杠:
(/.+)/?
最后,最后的QSA
標志會將原始查詢字符串(如果有的話)附加到重寫的URL上。 如果您想使正則表達式不區分大小寫(即允許使用host.com/NL/index/
URL),則也可以添加NC
標志: [QSA,NC]
。 另外,您可以通過在正則表達式中使用[A-Za-z]
而不是[az]
來明確允許使用大寫字母。
嘗試這個
RewriteRule ^([a-z]{2})/(.+)/?$ /$2.php?lang=$1 [QSA]
通過httpd.conf
啟用mod_rewrite和.htaccess,然后將此代碼放在DOCUMENT_ROOT
目錄下的.htaccess
:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$2.php -f
RewriteRule ^([a-z]{2})/(.+?)/?$ /$2.php?lang=$1 [L,QSA,NC]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.