2011-02-22 188 views
0

這似乎是一個簡單的.htaccess重寫規則,但我仍然有問題。.htaccess重寫規則問題

基本上,我希望域後的任何文本被解釋爲index.php?$text,除非當然,文本是文件名。

例子:

http://domain.com/register - >http://domain.com/index.php?register

http://domain.com/images/image.jpeg - >http://domain.com/images/image.jpeg

這是我到目前爲止有:

RewriteRule ^[A-Za-z]+$ index.php?$1

但是,它不經過$ _GET變量到PHP頁面應該。

感謝您的任何幫助。

編輯我使用PHP-所以如果有更好的腳本方法去比這個.htaccess,讓我知道。

回答

1

添加QSA標誌的重寫規則因此它會看起來像

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA] 

QSA(查詢字符串相加)增加查詢字符串到您的重寫結果。所以任何$ _GET都會被附加到傳遞給你的php腳本的東西上。

你可能會考慮添加L標誌,特別是如果這是你所有的嘗試重寫。它告訴處理器,如果這個規則處理重寫的結束。

因此,它看起來像

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA,L] 

我經常補充NC爲好,這使得它不區分大小寫的,所以你不必像你在你的正則表達式做處理大寫和小寫。

要記住的另一件事是,你沒有通過1美元作爲適當的獲取變種。將其命名爲var將會更好。而我剛剛注意到,你並沒有首先創建$ 1 var。嘗試這個。

RewriteRule ^([A-Za-z]+)$ index.php?urlRequest=$1 [QSA,L] 

然後檢查它在你的index.php

echo $_GET['urlRequest']; 

希望幫助!

+0

我想你給的代碼,但它似乎並沒有工作......(我用'如果測試它(isset($ _GET ['register'])){echo「Get request」;}'。 – element119 2011-02-22 20:49:20

+0

@Chromium你的url字符串是什麼樣的? – ehudokai 2011-02-22 20:50:13

+1

我會加上#RewriteCond%{REQUEST_FILENAME}!-f #RewriteCond %{REQUEST_FILENAME}!-d – 2011-02-22 20:50:38

1

首先,你永遠不會分組(存儲)文本,所以$ 1是「」。你應該使用:

RewriteRule ^([A-Za-z]+)$ index.php?$1 

其次,如果你想忽略文件名(任何帶有'。'的文件)。使用:

RewriteCond %{REQUEST_URI} "^([^\.]*)$" 
RewriteRule ^([.]+)$ index.php?$1 

其中說如果域後的路徑不包含'。'把它改寫爲index.php?富

如果你想限制的文件擴展名,而應使用:

RewriteCond %{REQUEST_URI} "^([^\.(php|jpeg|html|css|ico)]*)$" 
RewriteRule ^([.]+)$ index.php?$1