為什麼 RewriteBase 不工作?
這是我正在嘗試做的事情:
- 域名是thinkingmonkey.me
- 域有 127.0.0.1 作為 IP 地址
- mod_alias已安裝。
我有一個名為
directories.conf
. 我在其中擁有與目錄有關的所有配置。directories.conf
包含在httpd.conf
我的
directories.conf
有Alias /runs /xhprof/xhprof_html <Directory /mysite/xhprof/xhprof_html> Order allow,deny Allow from all AllowOverride All </Directory>
在
/mysite/xhprof/xhprof_html/.htaccess
. 我有以下內容:RewriteEngine on RewriteBase /runs RewriteRule .* index.php
我要做的就是將任何請求定向
/mysite/xhprof/xhprof_html/
到index.php
.當我要求
thinkingmonkey.me/runs
沒有尾部斜杠時,我得到404 not found
.所以,我推斷這
RewriteBase
是行不通的。我究竟做錯了什麼?
這裡有幾件事在起作用。首先,該
Alias
指令希望其右側是伺服器上的絕對物理路徑:您想要Alias /runs /mysite/xhprof/xhprof_html <Directory /mysite/xhprof/xhprof_html> Order allow,deny Allow from all AllowOverride All </Directory>
其次,RewriteRule
RewriteRule .* index.php
不僅匹配http://.../runs
,還匹配任何以 開頭的 URLhttp://.../runs/
,甚至,例如http://.../runs/css/...
。有幾種方法可以解決這個問題。
選項 1:您可以讓 RewriteRule 僅將執行的根重定向到 index.php:
RewriteRule ^$ index.php RewriteRule ^/$ index.php
選項2:您可以讓您的 mod_rewrite 配置作為文件存在的特殊情況,並將其他所有內容重定向到
index.php
# Require the path the request translates to is an existing file RewriteCond %{REQUEST_FILENAME} -f # Don't rewrite it, but do stop mod_rewrite processing RewriteRule .* - [L] # Now, redirect anything into index.php RewriteRule .* index.php
選項 3:您可以對某些 URL 進行特殊處理,並將其他所有內容重定向到
index.php
RewriteCond $1 !^css/ RewriteCond $1 !^js/ RewriteRule .* index.php
選項 4:如果您希望將任何 URL 映射到目錄以顯示
index.php
文件(如index.html
),那麼有一種非常簡單的方法,這可能就是您想要的。您可以將以下內容放在 a.htaccess
或<Directory>
in 塊內directories.conf
:DirectoryIndex index.php index.html
腳註:上面的 RewriteRules 基本上丟棄了任何最終映射到
index.php
. 這包括查詢字元串,因此/runs/?foo=bar
與/runs/
. 如果這不是你想要的,你需要一個規則RewriteRule ^(.*)$ index.php/$1 [QSA]
它保留了路徑資訊(
$1
部分)和查詢字元串(“QSA”=“查詢字元串追加”。)我是不是寫的太多了?:)