2012-09-14 43 views
0

我試圖使用apaches mod_rewrite模塊將目錄/ docs中的所有URI重寫爲/docs/index.php。mod_rewrite在RewriteCond目標上不匹配 - 找不到URL

該URI不存在作爲一個目錄結構,當我將URI重寫爲某個退出的內容時,我認爲這是不必要的。

我收到錯誤:

"The requested URL /docs/view/my_doc was not found on this server."

這些都是我重寫規則:

RewriteEngine On 
    RewriteCond %{REQUEST_URI} ^docs/([a-z]+)/([A-Za-z0-9_-]+)/?$ 
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L] 

我做在httpd.conf配置。另外,我正在使用多v主機設置。

我的問題是什麼?如何解決?

我使用的是在CentOS 6.2的Apache/httpd的


UPDATE

包括我的虛擬主機,以及:

NameVirtualHost *:80 

<VirtualHost *:80> 
    ServerName www.smicloud.org 
    ServerAlias *.smicloud.org 
    VirtualDocumentRoot /var/www/html/www.smicloud.org 
    ExpiresActive On 
    ExpiresDefault "access plus 14 days" 
    # insert logging config, anything else you need.. 
    #Define FileEtag so it doesnt use node 
    FileETag MTime Size 
    <Directory /var/www/html/> 
     Order Allow,Deny 
     Allow from all 
     # Get rid of this if you need to allow htaccess files: 
     AllowOverride None 
    </Directory> 
     RewriteEngine On   
     RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L] 
</VirtualHost> 

回答

0

好了,有一對夫婦的事情,我不得不爲了修復它做,使用@donalds建議(這其實我之前試過):

1 - 我必須有一個「?」在RewriteRule的正則表達式的末尾:

^/docs/([a-z]+)/([A-Za-z0-9_-]+)/?$

然後我可以選擇是否在地址的末尾加上'/'。

2 - 我不得不在我的RewriteRule的正則表達式的開頭添加一個'/'。即:

^/docs/([a-z]+)/([A-Za-z0-9_-]+)$

3 - 我也不得不添加的 'http://%{HTTP_HOST} /' 的一部分,以新的URI:

http:// %{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L]

這是我結束了:

RewriteRule ^/docs/([a-z]+)/([A-Za-z0-9_-]+)$ http:// %{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L]

也許我爲什麼需要添加%{HTTP:HOST}是因爲它是一個多虛擬主機設置。

+1

如果你用')/?$'而不是''$''結束目標字符串,如果你有一個結尾的斜線,它會匹配。 – MidnightLightning

+0

是的,你真的在​​你的例子中有這個,忘了它。當然這更好。更新我的答案。謝謝! – Nicsoft

0

這應該工作

RewriteEngine On 
RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L] 
+0

謝謝!我仍然遇到同樣的錯誤。用我的VirtualHost定義更新了我的答案。我認爲它應該工作,但它不,不知道爲什麼。 – Nicsoft