3 回答

TA貢獻1805條經驗 獲得超10個贊
錯誤與此有關 RewriteRule
RewriteRule /sub/directory/index\.php - [L]
請參閱匹配什么?
在每個目錄的上下文(目錄和 .htaccess)中,模式只匹配部分路徑,例如“ /app1/index.html ”的請求可能會導致與“ app1/index.html ”或“index”的比較.html”取決于 RewriteRule 的定義位置。
和“每目錄重寫”:
刪除的前綴總是以斜杠結尾,這意味著匹配發生在一個從來沒有前導斜杠的字符串上。因此,帶有 ^/ 的模式永遠不會在每個目錄的上下文中匹配。
這意味著,前導斜杠會阻止模式匹配。將其更改為
RewriteRule ^sub/directory/index\.php - [L]
將解決問題。
在500內部服務器錯誤來自于第二規則(在組合與非匹配的第一規則)。
RewriteRule ^.*$ /sub/directory/index\.php
這會將任何請求重寫為/sub/directory/index.php
,然后將再次重寫為/sub/directory/index.php
,依此類推,直到重寫模塊放棄并顯示“重定向過多”錯誤或類似錯誤。

TA貢獻1811條經驗 獲得超5個贊
另一種方法,您可以使用此代碼:(注釋第二行和第三行以接受 url 中的偶數文件和目錄)
重寫引擎開啟
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
重寫規則 ^(.*)$ /index.php?path=$1 [NC,L,QSA]

TA貢獻1873條經驗 獲得超9個贊
語法錯誤,在第二個匹配(不是最后一個)之后另外重新匹配第一個規則。
任何請求 -> /sub/directory/index.php -> /sub/directory/index.php - [L]
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteRule /sub/directory/index\.php - [L]
RewriteRule ^(.*)$ /sub/directory/index.php [L]
</IfModule>
我的另一個建議(index.php 是目錄索引文件,在請求目錄時是第一個):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^sub/directory/(.*)$ /sub/directory/ [R=301,L]
</IfModule>
- 3 回答
- 0 關注
- 222 瀏覽
添加回答
舉報