2012-12-20 52 views
1

我使用PHP。htaccess - URL重寫 - 刪除斜槓,但不是從文件

一個工作htaccess的文件

RewriteEngine On 
RewriteBase /folder/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#RewriteRule .*[^/]$ $0/ [L,R=301] 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.+)$ index.php/$1 [L] 

看用#註釋行。取消註釋時,它會將重定向添加到斜線。我使用URL重寫toroPHP

我想重寫結束斜線

  • 我想重定向到從重寫網址結尾斜槓,就像上面的代碼。
  • 我不想從真正的文件結束斜線,如jquery.js,style.css。

實施例(更新2012年12月21日)

  • /category/test/category/test/
  • http://www.test.com/myjsfile.jshttp://www.test.com/myjsfile.js

問題

  • 如果我使用上面的代碼未註釋,它會爲所有網址添加結尾斜槓,包括javascript文件和css文件。
  • 我只希望重寫的網址以斜槓結尾。

問題

可以將其與htaccess的做什麼?如果是這樣如何?

+0

所以,你要重定向'/不/真正/ path'到'/不/真正/路徑請求/'**和**你想有尾隨斜槓在真實的文件,如腳本和樣式?你的第二個子彈很混亂。你「不想從真實文件中刪除結尾斜槓」?我沒有看到任何增加斜線的地方。此外,我嘗試了這些規則,並沒有看到添加到我的腳本和css文件中的尾部斜線。僅適用於實際不存在的URI。 –

+0

是的你是對的。第二個項目符號不正確。我已經糾正它,甚至添加了一個例子。 –

+0

就像我剛纔提到的那樣,我取消了註釋,它適用於我。真正的文件不會受到影響,因爲上面的兩個條件都說「僅適用規則** **如果請求是**不是**真實文件或目錄」。我想你可以嘗試將它改爲'RewriteRule ^(。* [^ /])$/$ 1/[L,R = 301]'(我過去曾經用過),但這基本上是一樣的 –

回答

0

htaccess幾乎是正確的。然而,REQUEST_FILENAME需要在每個重寫規則之前,而不是在第一個之前。

這工作

RewriteEngine On 
RewriteBase /folder/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .*[^/]$ $0/ [L,R=301] 

RewriteCond $1 !^(index\.php) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php/$1 [L]