2011-01-24 114 views
1

我要讓我的網址從的mod_rewrite刪除子文件夾和PHP

root.com/sub/?page=home

TO

root.com/home

我想要去刪除子文件夾,刪除PHP,只是離開最基本的網址。 另外如果可能,我想將所有非'root.com/ [*]'重定向回root.com。例如,「root.com/home/index.php?page=home」和「root.com/sub/test/」都會重定向回「root.com」。

的.htaccess和mod_rewrite的似乎是最好的辦法 到目前爲止,我有這樣的:

RewriteEngine On 
#remove subfolder, WORKS 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

這個工程並刪除子文件夾

#remove PHP, not working :S 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

但這不是工作,離開「 ?page = home'ect 我想我在第二條規則的正則表達式之前缺少了一些東西,但是我對此很感興趣。

在此先感謝!

編輯:考慮到[L]的事情,仍然沒有骰子。

我猜它需要在一次命中而不是單獨迭代中完成。

+0

凹凸/我發現了另一個問題,當我認爲從我的電腦該站點時(第一部分)顯示爲'www.root.com/page',這很好,但是在我的隊友電腦上,它顯示爲'www.root.com/sub/page'wtf。 – Neros 2011-02-08 06:04:49

回答

0

mod_write的問題通常在於衝突;在這種情況下,第二個塊將與第一個塊追加後綴匹配,產生無限循環或500錯誤。

您應該每RewriteRule附加國旗[L]。例如。

RewriteEngine On 
#remove subfolder 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

#remove PHP 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

沒有[L]/abc將被改寫爲/index.php?page=abc,這將改寫爲/sub//index.php?page=abc

我75%確定這是問題,但它沒有經過測試,所以我不打賭。不要傷害嘗試。

+0

我給了它一個去,但我仍然得到像「www.root.com/?page=home」這樣的網址,所以子文件夾仍然消失,但PHP仍然在 – Neros 2011-01-25 09:15:23

0

此規則的問題,我認爲:

RewriteRule (.*) /sub/$1 [L]

嘗試將其更改爲:

RewriteRule (.*) /sub/index.php?page=$1 [L]

+0

左右給了這個鏡頭(其他變化)仍然不能得到它的工作:S – Neros 2011-01-27 05:09:23

相關問題