簡體   English   中英

PHP .htaccess將.php擴展名和語言目錄刪除為參數

[英]PHP .htaccess removing .php extension and language directory to parameter

我正在尋找PHP服務器中.htaccess文件的regulair表達式。

我想要的是它從第一個目錄中檢測語言作為參數:

  • nl

任何其他選項都必須視為目錄或文件名。 語言必須作為參數提供,而不會破壞任何其他參數。

我也想最后/替換為.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.

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