2010-12-10 65 views
5

我用我的htaccess文件的mod_rewrite與創造清潔的網址是這樣的:.htaccess中加入斜線,並迫使WWW用乾淨的網址

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 
</IfModule> 

我也想迫使該網站有「WWW」子域,並且最重要的是,如果網址沒有一個,請添加尾部斜線。

我是一個mod_rewrite絕對noob和我已經嘗試通過結合我在谷歌上找到的其他代碼(傷心,我知道)完成這個,但我總是以500錯誤結束。

這裏是我發現力WWW代碼:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC] 
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L] 
</IfModule> 

感謝您的幫助。

+0

做其中任何單獨工作?找出哪些規則正在破壞它。 – profitphp 2010-12-10 16:25:37

+0

我知道第一個作品,我認爲第二個作品也是。我只是不知道如何將它結合起來以獲得我想要的結果。 – imns 2010-12-10 16:50:24

回答

11

嘗試分離出www和尾部斜線檢查。這已經過測試,希望能爲你工作。你沒有說如果你正在運行放置在域根目錄或子目錄中 - 通常是在尋求htaccess幫助時的好信息。

RewriteEngine On 

# Assuming you're running at domain root. Change to working directory if needed. 
RewriteBase/

# 
# www check 
# If you're running in a subdirectory, then you'll need to add that in 
# to the redirected url (http://www.mydomain.com/subdirectory/$1 

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] 

# 
# Trailing slash check 

# Don't fix direct file links 
RewriteCond %{REQUEST_FILENAME} !-f 

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

# 
# Finally, forward everything to your front-controller 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php [QSA,L] 

要進行調試,註釋掉各個部分並查看哪些部分不工作。

+1

這個回答正確嗎?我試圖完成同樣的自己(*除了前綴「www」*)我無法得到這個答案的工作。 – Dan 2011-05-16 18:29:24

+0

同樣,我無法獲得此代碼的工作 – DaveO 2011-06-06 22:12:05

+0

經過測試,它對我來說仍然正常工作。什麼部分完全不起作用?尾部的斜線,轉發到index.php或www? – Leniency 2011-06-07 14:11:00

1

使用此和忘記您的問題;)

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] 
RewriteRule ^(.*?)/*$ http://%1/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://your-domain.ru/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule>