簡體   English   中英

Apache mod_rewrite正在刪除斜杠,並且通常會忽略我的規則

[英]Apache mod_rewrite is removing slashes and generally ignoring my rules

我機智的是,Stack Overflowers。 嘗試執行我認為是簡單的重寫規則,以用代字號替換URL中的斜杠,然后在末尾添加“ .html”。 所以我的.htaccess是這樣的:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)/(.+)$ $1~$2 [N]

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

基本上,我正在運行一條重復的規則,一次用波浪號替換所有斜杠,然后我的最終規則添加了“ .html”-因為我們所有的Web文件都需要放在一個文件夾中(客戶端請求-很傻,我知道)。

我已經在這里測試了模式“ part-one / part-two / part-three”: http : //martinmelin.se/rewrite-rule-tester/ ,並且只有當我切掉初始斜杠並刪除重寫后,它才有效條件(沒有理由我在其中放置的文件名不存在b / c應該在該服務器上存在),但是在我的本地服務器上不是這種情況。

它最終應該讀取文件“ part-one〜part-two〜part-three.html”,但是當我在本地計算機上查看Apache錯誤日志時,會得到以下信息:

文件不存在:/ path / to / website / part-one

因此,它基本上剔除了最后兩部分,並且從不嘗試添加“ .html”-那么到底是怎么回事? 請幫忙,mod_rewrite大師!

之所以要您刪除開頭的/是因為重寫引擎在通過htaccess文件中的規則運行前綴之前先去除了前綴(URI的前斜杠)。 如果您使用的是Apache 1.3,或者規則位於服務器或vhost配置中的非按目錄上下文中,則需要在規則模式中使用斜杠:

RewriteEngine on

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

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

此外,您可能不希望N標志,因為您希望重寫在當前迭代中立即停止。 同樣,在重寫之前先檢查.html實際是否存在的條件將防止500個內部服務器錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM