2012-01-03 23 views
14

我在互聯網上搜索關於.htaccess和重寫規則我需要做我的網站。.htaccess和params

我看到的東西我不明白,想知道這意味着什麼

我想知道是什麼2正則表達式,我需要用我的網站我需要使用所有其他人)之間的區別:

RewriteRule ^home$ mainpage.php?id=$1 [QSA] 

RewriteRule ^home(/)?$ mainpage.php?id=$1 [L] 

我看着QSA和L,但什麼(/)手段?

+0

home.php and mainpage.php? – 2012-01-03 02:22:19

+0

哦,對不起,壞的複製和粘貼 – 2012-01-03 02:24:25

+1

'(/)?'用於捕獲example.com/home和example.com/home /'。 – Virendra 2012-01-03 02:30:28

回答

18

該表達式將是(/)?而不是(/)。它意味着斜線或不在URL上。這兩個網址會去同一個地方:

http://www.domain.com/home/

http://www.domain.com/home 

所以斜線是可選的。這樣,如果一個機器人或搜索引擎放它,規則將起作用。

可以改寫規則是這樣的:

RewriteRule ^home/?$ mainpage.php?id=$1 [L,QSA] 

而且,我看到你說:

其他所有我需要使用

如果您所有的網頁進入中到相同的文件(在這個例子中是mainpage.php),你可以創建一個規則來自動重寫它們,而不是創建10個或15個規則(或更多)。您可以這樣做:

RewriteEngine on 
REwriteBase/
RewriteRule ^([a-z0-9\-_]+)/?$ mainpage.php?id=$1 [L,QSA] 

此規則將使用字母,數字,短劃線和下劃線作爲頁面。

+0

謝謝你的這個信息和這條規則,我有大約25頁,這是非常有用的 – 2012-01-03 02:37:45

+0

歡迎你 – 2012-01-03 02:38:12

2

(/)?表示「可選斜線」。

  • (/)創建一個包含/匹配括號之間任何內容的組。在這種情況下,由於它是單個字符,所以括號更多用於捕獲碎片。 (無論比賽將成爲$1$2,等這取決於有多少捕捉組(套括號)有在模式和他們在哪裏。)

順便說一句,你的第一個重寫規則不作一大堆的意義 - 因爲沒有組爲$1提供價值,所以它可能總是空白。在第二種情況下,$1將爲空或斜線,具體取決於子模式是否匹配。 home將被重寫爲mainpage.php?id=,並且home/將被重寫爲mainpage.php?id=/

  • ?表示「前一個原子的0或1」。(「Atoms」,BTW,是正則表達式的構件)。在這種情況下,由於前面的原子是(/)(實際上是/),所以?的意思是「0或1斜線」。
+0

謝謝你的信息 – 2012-01-03 02:37:50