2013-05-02 123 views
0

我有一些問題與國防部重寫。服務器是Ubuntu 12.04,Apache2,Php 5.4。國防部重寫問題

我想這樣的一個網址:

www.website.com/<modelName>/<imageNumber> 

而且

www.website.com/<modelName> 

要真正顯示:

www.website.com/showimage.php?model=<modelName>&image=<imageNumber> 

而且

www.website.com/model.php?model=<modelName> 

我已經在.htaccess把這個:

RewriteEngine On 
RewriteRule ^([^/]+)/([0-9]+)/?$ showimage.php?model=$1&image=$2 [R,L,NC,QSA] 
RewriteRule ^([^/]+)/?$   model.php?model=$1    [R,L,NC,QSA] 

我已檢查mod_rewrite已在Apache中加載。 但頁面只是不重定向。

編輯:只是爲了澄清,結果是404'資源/不存在於此服務器上'和'資源//在此服務器上不存在'。

奇怪的是,我昨天在玩它,並試圖制定一個規則,其中包括website.com/model/modelName,這似乎是有效的現在和不可能擺脫。我嘗試了十次重啓Apache,清除瀏覽器緩存,甚至安裝另一個我之前沒有的瀏覽器,但是即使在新的瀏覽器(FireFox)中,從昨天開始的死硬重定向仍然繼續。

我寫的新重定向規則是否正確?

如何將它們應用於實際?

我應該在.htaccess上設置chmod 777嗎?

非常感謝......

編輯:這裏是一些更多的信息。

我只有一個(默認)站點和文件(包括.htaccess)是否只是坐在在/ var/WWW

文件/ etc/apache2的/網站可用/默認看起來是這樣的:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www 
    <Directory /> 
      Options FollowSymLinks 
      AllowOverride All 
    </Directory> 
    <Directory /var/www/> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride None 
      Order allow,deny 
      allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
      AllowOverride None 
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
      Order allow,deny 
      Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

我還沒除了目錄/的AllowOverride改變任何東西有所有

的.htaccess看起來是這樣的:

RewriteEngine On 
RewriteLog "/etc/apache2/logs/rewrite.log" 
RewriteLogLevel 9 
RewriteBase/
RewriteRule ^([^/]+)/([0-9]+)/?$ showimage.php?model=$1&image=$2 [R,L,NC,QSA] 
RewriteRule ^([^/]+)/?$   model.php?model=$1    [R,L,NC,QSA] 

而且我已經運行服務apache2重新啓動無盡的時間。

該網址工作正常:

/showimage.php?model=Ai&image=12 

這一個不:

/Ai/12 

HELP!

回答

1
RewriteEngine On 
RewriteRule ^([^/]+)/([0-9]+)/?$ showimage.php?model=$1&image=$2 [R,L,NC,QSA] 
RewriteRule ^([^/]+)/?$   model.php?model=$1    [R,L,NC,QSA] 

而不是去「這應該工作」,我將只是翻譯規則,它留給你:

  • 的第一條規則將匹配[任何]/[數字]與或沒有結尾斜線並重新映射到showimage.php?model = $ 1 & image = $ 2使用重定向,將打破鏈(即第二個規則將不會執行),不區分大小寫(不需要),並保留查詢字符串參數。 第二個是一樣的,但model.php。

重要的是要注意第二個規則不匹配空字符串(即fetching /)。這可能是你的問題的一部分。

規則本身是正確的。您可以在重寫工具上對這些進行測試:http://martinmelin.se/rewrite-rule-tester/

我相信你的問題很簡單。請在評論中回答以下問題,我會從此處提出建議:

  • 您試圖獲取/沒有索引嗎?如果是這樣,你的規則都不符合它,這就是爲什麼你得到一個404.
  • 如果不是,你想要獲取什麼確切的URL?你有權訪問服務器日誌嗎?如果是這樣,你可以打開重寫日誌嗎?
+0

嗨,謝謝你的幫助。我沒有得到一個「空」的網址,即www.website.com。我正在收到首頁,這很好。但要求例如www.website.com/name/123給出了404,而www.website.com/showimage.php?model=name&image=123正常工作。 – Jesper 2013-05-02 22:35:14

+0

您可以在重寫規則之前添加以下行:'RewriteBase /'。讓我知道它是否做了任何事情。 – 2013-05-02 22:36:13

+0

我試圖通過添加到這一點的.htaccess接通重寫日誌: RewriteEngine敘述在 RewriteLog 「/etc/apache2/logs/rewrite.log」 RewriteLogLevel 9 重寫規則^([^ /] +)/([O- 9] +)/?$ showimage.php?model = $ 1&image = $ 2 [R,L,NC,QSA] RewriteRule ^([^ /] +)/?$ model.php?model = $ 1 [R,L ,NC,QSA] ...但文件夾/ etc/apache2/logs保持爲空 – Jesper 2013-05-02 22:37:05