2012-08-12 27 views
0

我一直在尋找這樣的事情(當然,年)現在年。如果有人能夠最終產生這個代碼,那將會很棒。htaccess的網址轉發到PHP文件有無斜線

此刻,我一直在使用這樣的:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 
RewriteRule ^(.*)\/$ $1.php [NC] 

而且它的偉大工程,但沒有尾隨斜線不起作用。而令人討厭的是它將所有包含的文件視爲一個文件夾,因此我將永遠將../添加到所有的css和js文件中。

除了上面,它的工作原理是這樣的(按預期):

  1. 如果www是不存在的,這將讓加
  2. http://www.example.com/page.php會去page.php文件
  3. http://www.example.com/page/會到page.php文件
  4. http://www.example.com/page會拿出一個404錯誤,因爲它是尋找的文件夾

我試過用Google搜索不同的東西,但沒有成功。我所需要做的就是喜歡沒有尾部斜線的網址,無論是將它轉發到尾部斜線還是喜歡它們。整個想法是,它讀取PHP文件,並在窗口作爲一個很好的搜索引擎優化類型的鏈接顯示出來:www.example.com/page

+0

'^(。*)\/$'< - 您的模式指定URL必須以正斜槓結尾! – Corbin 2012-08-12 03:14:08

+0

當我刪除這個,我得到一個內部服務器錯誤 – 2012-08-12 03:14:30

+0

這是因爲'^(。*)$'將匹配所有內容,因此一個無限循環追加'.php'到路徑會一遍又一遍地發生。最簡單的方法是使用'RewriteCond%{REQUEST_FILENAME} -f',這樣只有當路徑不存在時纔會重寫。 – Corbin 2012-08-12 03:16:50

回答

1
Options +FollowSymlinks 
RewriteEngine On 
DirectorySlash Off 
RewriteBase/
RewriteCond %{HTTP_HOST} ^example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ $1.php [NC] 

<IfModule mod_rewrite.c> 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

這工作。回答這個問題。任何人都可以改善這個?

+0

我挺想有一個自定義404錯誤頁面指向/404.php但那種重寫規則不會讓這種情況發生,但事情是,如果我刪除,我得到一個內部服務器錯誤。 – 2012-08-12 04:46:37