2014-06-18 95 views
0

我在我的.htaccess中做了一些重定向的東西,它工作安靜。.htaccess重寫更改錯誤url

RewriteEngine On 
# add www. if missing 
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 
# redirect index.html and index.php to the simple homepage 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\|/index\.html\ HTTP/ 
RewriteRule ^index\.php$|^index\.html$ http://www.example.com/ [R=301,L] 
# add trailing slash if missing 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*[^/]$ /$0/ [L,R=301] 
# redirect simulated directories to php files of the same name in /content/ 
RewriteCond %{REQUEST_URI} !^(\/css|\/images) [NC] 
RewriteRule ^([^/]+)/$ content/$1\.php?rw=1 [QSA,L] 
RewriteCond %{QUERY_STRING} !^rw=1 
RewriteRule ^content/([^/]+).php$ /$1/ [R=301,L] 

不過,雖然添加尾隨斜線部分啓用有使用URL一個奇怪的問題不存在,並且是針對我的404錯誤頁面: 例如,如果我進入www.example。 com/notexisting /那個URL被轉換爲www.example.com/content/notexisting.php/?rw=1 當我禁用尾部斜線部分或htaccess中模擬目錄的部分時,不會發生這種情況。但我想保留兩者。有沒有可能?

回答

0

看起來你可以通過給你的'斜槓'重定向添加一個額外的條件來很容易地解決你的問題。您似乎沒有以.php結尾的任何網址,因此您可以檢查您的網址是否已以此結束。如果不是這種情況,您可以添加斜槓。

RewriteEngine On 

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

# redirect index.html and index.php to the simple homepage 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\|/index\.html\ HTTP/ 
RewriteRule ^index\.php$|^index\.html$ http://www.example.com/ [R=301,L] 

# add trailing slash if missing 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule ^.*[^/]$ /$0/ [L,R=301] 

# redirect simulated directories to php files of the same name in /content/ 
RewriteCond %{REQUEST_URI} !^(\/css|\/images) [NC] 
RewriteRule ^([^/]+)/$ content/$1\.php?rw=1 [QSA,L] 

RewriteCond %{QUERY_STRING} !^rw=1 
RewriteRule ^content/([^/]+).php$ /$1/ [R=301,L] 
+0

完美!而已!非常感謝。 – konraed