2011-06-03 50 views
2

我正在使用需要漂亮url的CMS。 我發現htaccess的這個代碼片段,我認爲會解決我的所有問題:使htaccess將所有目錄放入單個獲取變量

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^(\w+)$ ./index.php?route=$1 

然後在的index.php我把這個:

echo $_GET['route']; 

如果我去mywebsite.com/cars,我可以看到「汽車」。完善。但是,如果我去mywebsite.com/cars/ford,我會得到一個「找不到頁面」。我究竟做錯了什麼?我希望在第一個「/」之後的所有東西都卡在路由變量中,這樣我就可以爆炸並製造魔法了。

+0

我試過所有提供的解決方案,他們的工作,但我有問題與我的網頁中的鏈接。如果我去mysite.com/cars,它的工作原理。但是,一旦我添加了另一個目錄,或者甚至是一個尾部的斜線,index.php中的圖像,css等嘗試從該目錄加載(mysite.com/cars/style.css)。 – Brandon 2011-06-03 19:46:40

+0

另外,我的鏈接是相對的...他們必須是絕對的嗎?我想我認爲htaccess比實際更強大一點。 – Brandon 2011-06-03 20:05:51

回答

3

這應該工作得很好:

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

您不必通過URL作爲GET參數到腳本,因爲那樣會導致有關其他頭痛轉義特殊字符。您可以通過$ _SERVER ['REQUEST_URI']輕鬆訪問您的網址。

+0

這可以捕捉所有內容...但我的頁面中的鏈接有問題。如果我去http://mysite.com/cars,它可以。但是,一旦我添加了另一個目錄,甚至是一個尾部的斜線,我的index.php中的images/css/etc就會嘗試從該目錄加載(mysite.com/cars/style.css)。我認爲那些改寫條件應該照顧到這一點? – Brandon 2011-06-03 19:29:48

+0

這是一個不同的問題。您需要在HTML中使用絕對路徑(前導/)引用CSS/JS文件。 – 2011-06-03 22:26:10

+0

謝謝!我現在起來跑步了。 – Brandon 2011-06-03 23:19:05

0

把這幾行.htaccess文件:

Options -MultiViews +FollowSymLinks 
RewriteEngine On 

RewriteRule ^(?!index\.php)(.*)$ /index.php?route=$1 [L,NC,QSA] 
0

\w不匹配斜槓/。你需要.+而不是\w+

RewriteRule ^(.+)$ ./index.php?route=$1 
0

首先,嘗試本作的.htaccess:

Options +FollowSymlinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

RewriteRule ^.*$ index.php/$1 [NC,L] 

獲取查詢部分(例如,/ A/B/C)是這樣的:

$route = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 

而且爆炸吧:

$arr = explode('/', $route) 

$ arr [0]是要運行的php腳本,$ arr [1..n]是查詢部分。

相關問題