2017-10-05 215 views
1

我遇到重定向問題。現在我有一個網頁地址,如:Apache - 重定向 - 路徑

http://localhost/Stella/Wiki/index.php 

而且在同一目錄下,我有我.htaccess文件,它應該重定向到index.php所有請求。

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/Stella/Wiki/index.php 
RewriteRule (.*)$ /Stella/Wiki/index.php?id=$1 [L,QSA] 

這種重定向的作品真的很好,但我想在相對的方式來使用它,比如:

RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule (.*)$ /index.php?id=$1 [L,QSA] 

就像沒有絕對路徑,因爲我將有很多的子文件夾,和我不我想要有如下長規則:/xxx/xxx/xxx/xxx/index.php

你能幫我解決這個問題嗎?我不知道該怎麼辦,或者甚至有可能?

回答

1
RewriteCond %{REQUEST_URI} !^/Stella/Wiki/index.php 
RewriteRule (.*)$ /Stella/Wiki/index.php?id=$1 [L,QSA] 

如果.htaccess位於/Stella/Wiki/.htaccess那麼你可以編寫這些指令,如:

RewriteRule ^index\.php$ - [L] 
RewriteRule (.*) index.php?id=$1 [L,QSA] 

如你所說,這個現在使用相對路徑。請注意,相對路徑不以斜槓開始。如果您使用斜槓前綴,那麼它將是根相對的(即相對於站點的文檔根目錄)。

當您在每個目錄.htaccess文件中使用相對路徑時,則會在末尾添加目錄前綴(.htaccess文件所在的文件系統路徑)。因此,index.php位於.htaccess文件所在的目錄中。你可以用RewriteBase指令覆蓋它。

但是,這與您的指令有點不同。而不是條件,它只處理指令,如果我們還沒有請求目標URL。我們有一個例外,如果該URL已被請求,則會阻止正在處理的任何其他指令。

但是請注意,這會將的所有請求指定爲index.php(如您的原始指令那樣)。包括對現有文件和目錄的請求 - 如果這是一個問題?