2012-03-26 142 views
1

我有下面的PHP代碼:URL重寫規則不起作用

<?php 
    if(isset($_GET['article'])) 
    { 
     echo "<b>success</b>"; 
    } 
?> 

而且這個網站:

<a href="http://localhost/PHPTest/index.php?article_27" >Click me</a> 

我想拿出我自己的網址。

通過這樣做,我嘗試使用mod_rewrite()。這是在我的.htaccess:

RewriteEngine On 
RewriteBase /PHPTest/ 

RewriteRule ^article_([0-9]+)$ index.php?article=$1 

正如你所看到的,我試圖讓文章得到變量..

然而,這不工作.. htaccess的不理解artcile_27,例如,因爲article = 27 ..

這是爲什麼?

什麼應該發生的是,當我按下鏈接時,應該打印成功的詞。問題是它沒有。

回答

1

您的規則應該是:

RewriteRule ^index.php?article_([0-9]+)$ index.php?article=$1 

不過,我會質疑這種方式使用mod_rewrite的。

首先,如果您的網址總是隻有index.php?article_27,那麼您可以直接在「article_27」上使用$_SERVER['QUERY_STRING'],而不需要mod_rewrite。

如果你打算使用mod_rewrite,爲什麼不讓你的網址爲/PHPTest/article/27

RewriteRule ^article/([0-9]+) index.php?article=$1 

以上也將允許/PHPTest/article/27/title_of_article_here,它給你兩個漂亮的東西:ID仍然存在,因此很容易檢索服務器端,而名稱是URL所以這是很好的閱讀作爲一個人並幫助搜索引擎。如果你現在查看你的URL欄,你會注意到stackoverflow本身使用這種方法。

+0

哇..令人難以置信的是,我被困在這個問題上一整天! – BlackFire27 2012-03-26 16:56:20

1

打開此:http://localhost/PHPTest/article_27

如果成功,就意味着你的作品改寫。在這種情況下,你所要做的就是改變HTML:

<a href="http://localhost/PHPTest/index.php?article_27" >Click me</a> 

應該是:

<a href="http://localhost/PHPTest/article_27" >Click me</a> 

或者更確切地說,只是:

<a href="/PHPTest/article_27" >Click me</a> 

使您的代碼更容易移植到另一個主機名,端口,協議...