2

當前網址:通過htaccess的刪除ID和index.php文件在子目錄

domain/index.php?id=p123 

我想:

  1. 加上www
  2. 刪除:index.php文件
  3. 刪除'id'表格網址

我做這種方式:

RewriteCond %{THE_REQUEST} /(?:index\.php)?\?id=([^\s&]+) [NC] 
RewriteRule^/%1? [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?id=$1 [L] 

RewriteCond %{THE_REQUEST} /(?:index\.php)?\?id=([^\s&]+) [NC] 
RewriteRule^/%1? [R=302,L,NE] 


RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

它的工作原理,如果DOMIAN是沒有子目錄。

我怎樣才能改變這種代碼支持子目錄太像這樣:

domian/subdirectory/index.php?id=p123 

回答

3

我會去這樣理解:

首先,重定向非www的網址WWW的:

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

重寫友好的URL,以各自的index.php文件S:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*/)?([^/]+)$ /$1index.php?id=$2 [L] 

接下來,處理與index.php原始的URI在其中:

RewriteCond %{THE_REQUEST} ^GET\ /(.*/)?(?:index\.php)?\?id=([^\s&]+) [NC] 
RewriteRule^/%1%2? [R=301,L] 

最後一個規則也將照顧網址像domain.com/dir/?id=sthdomain.com/dir/index.php?id=sth

2

您可以用做到這一點以下變化:

RewriteCond %{THE_REQUEST} \ /(.*/|)(?:index\.php)?\?id=([^\s&]+) [NC] 
RewriteRule^/%1%2? [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !index\.php 
RewriteRule ^(.*/|)([^/]*)$ $1index.php?id=$2 [L] 

我們知道w %{THE_REQUEST}的格式爲GET /path/to/index.php?id=12312412 HTTP/1.1或沿着這些行的內容。在第一條規則中,我們匹配\,它是一個文字空間,然後是始終存在的開始斜線。 (.*/|)將匹配所有東西,直到index.php,或者完全沒有。我們在第二條規則中也採用了相同的技巧。我添加了RewriteCond %{REQUEST_URI} !index\.php以防止在特定目錄中不存在index.php時出現無限循環。

+0

heh,與我的^ _ ^很相似的答案。雖然我用一分鐘打敗了你;-) – hjpotter92

+0

感謝您的注意。 – partiz

+1

@ hjpotter92但我的答案包含兩個額外的'|',你的答案不。所以:哈哈,開玩笑吧,我贏了! ;-) – Sumurai8

相關問題