簡體   English   中英

htaccess RewriteCond!-f問題

[英]htaccess RewriteCond !-f issues

更新:問題解決了
幾個小時后,我終於明白問題是在文件夾權限(757而不是755)。

該死的,我覺得自己像個白痴,但至少,問題解決了:)

感謝大家!


我的.htaccess和mod_rewrite有一個奇怪的問題。

目前,我在我的root上有以下.htaccess:

Options +FollowSymLinks
Options -MultiViews

RewriteEngine On

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.php [NC,L] 

問題是
我希望能夠訪問任何現有文件。

即: mysite.com/anydir/myfile.png - >打開anydir / myfile.png
- mysite.com/anydir/script.php - >打開anydir / script.php
- mysite.com/file.png - > open file.png
- mysite.com/notadir/imnotafile - >重寫

但是,除了第二點之外,一切都有效。 我在我的test文件夾中有一個file.php ,但是當我做mysite.com/test/file.php ,它會繼續重寫它,它不應該......

我做錯了什么?

大概可以做到這一點:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

更新1

在這部分代碼中:

RewriteRule ^index\.php$ - [L]

[L]立即停止重寫過程,不再應用任何規則。 所以,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.php [NC,L] 

不解釋。

更新2:

服務器將遵循符號鏈接:

Options +FollowSymLinks

服務器將禁用多個視圖:

Options -MultiViews

將啟用重寫引擎:

RewriteEngine On

重寫的基本目錄是/

RewriteBase /

如果請求與不存在的文件匹配,請繼續:

RewriteCond %{REQUEST_FILENAME} !-f

如果請求與不存在的目錄匹配,請繼續:

RewriteCond %{REQUEST_FILENAME} !-d

在不敏感的情況下重寫為index.php ,並停止執行下一個規則:

RewriteRule index.php [NC,L] 

所以,試試以下內容:

Options +FollowSymLinks
Options -MultiViews

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule index.php [NC,L]

如果你只是想擺脫你可以使用的404錯誤

ErrorDocument 404 index.php

如果你想重寫每個目錄,我猜你應該刪除;

RewriteCond %{REQUEST_FILENAME} !-d

暫無
暫無

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

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