2012-05-11 101 views
1

我不太習慣使用htaccess文件,所以我在這一個上苦苦掙扎了一段時間:如何在添加尾部斜線(.htaccess/mod_rewrite)後重寫URL?

我想知道如何將URL(example.com/foo/bar)重寫爲( example.com/index.php?q=/foo/bar)之後增加一個尾部斜槓(301重定向)初始URL:

我知道如何添加單獨結尾的斜線:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://exemple.com/$1/ [L,R=301] 

而如何重寫的index.php:

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

但我只是想不出如何做到既在同一時間...

任何幫助都更受歡迎!

皮埃爾·弗雷斯

+0

只要把兩套行到一個文件中。無需重複'RewriteEngine on'部分。但是我會用'^(。+)$' – Gerben

+0

嗯,這是當然的,我試圖第一件事:)但它不工作... 不過我注意到,把重寫的index.php先進行301重定向轉到index.php?q = XXX,而不是添加尾部斜槓... –

+0

重定向應始終先到位。你能解釋一下什麼是行不通的嗎?我認爲這兩個腳本都在自己的工作?我不明白爲什麼它不起作用。我唯一能想到的是,當$ _GET ['q']以斜槓結尾時,php腳本不喜歡它? – Gerben

回答

2

在你的.htaccess試試這個(我測試了它,據我可以):

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [L] 

RewriteCond %{REQUEST_URI} [^/]$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

RewriteRule ^(.*)$ index.php?q=$1 [L] 
+0

剛剛試了一下,我想你幾乎得到它的權利: 眼下,重寫工作,但重定向是有點奇怪: 當我嘗試example.com/foo/bar重定向到example.com/www/sourcefolder/foo/bar/(/ www/sourcefolder /是我網站document_root的絕對路徑) –

+0

幾乎?它仍然沒有工作? – Ansari

+0

對不起,我完成我的答案之前鍵入輸入:)剛剛編輯它! –

0

您這裏有一個公認的答案,但我還是想回答這個問題,因爲實際的答案是方式更簡單運行它通過多個(和緩慢)重定向,如在其他答案。

把這個代碼在你.htaccessDOCUMENT_ROOT目錄:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php?q=%{REQUEST_URI} [L] 
相關問題