2009-06-12 60 views
11

我想使用mod_rewrite製作漂亮的URL,但只有一個版本的.htaccess文件可用於服務器上的任何用戶。如何使用mod_rewrite從.htaccess引用當前目錄?

到目前爲止,我有標準漂亮的URL的.htaccess:

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

理想情況下,我想類似的東西,以

RewriteRule ^(.*)$  %{URL of this file's directory}/index.php/$1 [L] 

此文檔將導致我相信,我想是不是必需:

注意:每個目錄中的模式匹配con文本 永遠不要忘記模式應用於每個服務器配置文件中的完整URL。但是,在每個目錄配置文件中,每個目錄前綴(對於特定目錄始終相同)會自動刪除以進行模式匹配,並在替換完成後自動添加。這個功能對於許多種重寫都很重要 - 如果沒有這個功能,你總是需要匹配父目錄,這並不總是可能的。

我仍然得到錯誤的結果,不過,我是否沒有把領先/在對重寫規則的index.php文件的前面。

此,

http://server/test/stream/stream

變成

http://server/index.php/stream

http://server/test/index.php/stream

當htaccess的文件是在/測試/。

+0

此外https://stackoverflow.com/q/4704508/632951 – Pacerier 2017-10-04 02:48:09

回答

2

原來,無論我把index.php放在前面還是放在前面都沒關係。通過關閉它,腳本可以正常工作。我一直在使用R標誌進行測試,R標誌使用重定向上的物理目錄。

+0

是的,** **可是[留下它關掉你依靠rewritebase的值](https://stackoverflow.com/a/11443194/632951),其中**可能不是您的htaccess父文件夾。無論如何,離開它是一個駭人的解決方案,不是一個真正的解決方案。 – Pacerier 2017-10-04 02:46:17

8

我有一個類似的問題,但發現根本留下關閉根「/」導致我的測試Web服務器(在Windows XAMPP)服務的URL類似於:

http://localhost/C:/xampp/htdocs/sites/test/

不完美。我的解決方案是使用RewriteCond從REQUEST_URI中提取路徑。下面是從URL的末尾刪除不想要的「的index.php」一個例子:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$ 
RewriteRule index.php %1/ [r=301,L] 

注:在「%1 /」百分號,而不是一個美元符號。

%1-%9從最後匹配的RewriteCond獲取模式,$ 1- $ 9從RewriteRule獲取模式。

參見: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

乾杯:)

相關問題