2016-09-28 101 views
1

所以我試圖讓一個.htaccess文件工作,重新映射我的Web服務的一些URL。我有下面的代碼在我的.htaccess文件:mod_rewrite重新映射不工作

# General Settings 
Options +FollowSymLinks -Indexes 
Allow from all 
AddCharset utf-8 .css .html .php 

RewriteEngine on 
RewriteBase/

# Option 1: Remove Index.php from URL 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

# Custom Options: Webservices 
RewriteRule ^applications/([0-9]+)/infobox\.xml$ app/makeInfoBox/$1/ [L] 

刪除的index.php工作得很好,所以我認爲mod_rewrite的正常工作。但爲什麼我的Web服務規則不起作用?

它應該重映射https://example.com/applications/258/infobox.xmlhttps://example.com/app/makeInfoBox/258/或不應該嗎?

當我添加[R]標誌它可以工作,但我不想URL重定向,我希望它重新映射。

感謝您的回答!

編輯: 所以經過一些測試後,我達到了我真的沒有想法的地步。這是我的mod_rewrite代碼:

# General Settings 
AddCharset utf-8 .css .html .php 

RewriteEngine on 
RewriteBase/

# Custom Options: Webservices 
RewriteRule ^applications/([0-9]+)/infobox\.xml$ app/makeInfoBox/$1/ [DPI] 

# Option Remove Index.php from URL 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

我現在已經記錄與高日誌級別激活。這裏是被記錄:

附加路徑信息後綴:在/ etc/apache2的/ htdocs中/ web服務/應用程序 - > /etc/apache2/htdocs/webservices/applications/258/infobox.xml

條per- dir前綴:/etc/apache2/htdocs/webservices/applications/258/infobox.xml - > applications/258/infobox.xml

應用模式'^ applications /([0-9] +)/ infobox \。 XML $」到URI '應用程序/ 258/infobox.xml'

改寫 '應用/ 258/infobox.xml' - > '應用程序/ makeInfoBox/258 /'

添加每-dir的前綴:應用程序/ makeInfoBox/258/- >的/ etc/apache2的/ htdocs中/ web服務/應用/ makeInfoBox/258/

條每-DIR前綴:在/ etc/apache2的/ htdocs中/ web服務/應用程序/ makeInfoBox/258/- >應用程序/ makeInfoBox/258/

施加模式 '(。*)^ $' 到URI '應用程序/ makeInfoBox/258 /'

的RewriteCond:輸入='的/ etc /的apache2/htdocs中/ web服務/應用/ makeInfoBox/258 /」模式= ' - ˚F!'=>匹配

的RewriteCond:輸入= '的/ etc/apache2的/ htdocs中/ web服務/應用/ makeInfoBox/258 /' 圖案= '!-d'=>匹配

重寫 '應用程序/ makeInfoBox/258 /' - > '/index.php?/app/makeInfoBox/258/'

分裂URI =/index.php的/應用/ makeInfoBox/258 /? - > URI =/index.php的,ARGS = /應用/ makeInfoBox/258/

試圖取代前綴的/ etc/apache2的/ htdocs中/ web服務/使用/

試圖取代上下文的docroot的/ etc/apache2的/ htdocs中/ webservices with context prefix

使用/index.php進行內部重定向[INTERNAL REDIRECT]

strip per-dir prefix:/etc/apache2/htdocs/webservices/index.php - > index。PHP

施加圖案 '^應用/([0-9] +)/信息框\ .XML $' 到URI '的index.php'

條每-DIR前綴:在/ etc/apache2的/ htdocs中/ web服務/ index.php的 - >的index.php

施加模式 '(。*)^ $' 到URI '的index.php'

的RewriteCond:輸入='的/ etc/apache2的/ htdocs中/ web服務/索引.php'pattern ='! - f'=>不匹配

通過/etc/apache2/htdocs/webservices/index.php

比較重定向和重映射時的日誌輸出顯示它幾乎完全相同。

我在做什麼錯?

回答

0

嘗試像這樣

Options -MultiViews 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^applications/([\d]+)/infobox.xml$ app/makeInfoBox/$1/ [L] 
+0

我綁了,但不是它周圍的錯誤的方式? 我希望當我訪問https://example.com/applications/258/infobox.xml時,mod_rewrite將它本地映射到https://example.com/app/makeInfoBox/258/,但不會更改URL。 我的服務器上有CodeIgniter,URl是我的其中一個函數(controller(app) - > methode(makeInfoBox) - > Parameter(id = 258))的路徑 – Fuerro

+0

你輸入瀏覽器的URL什麼是原始網址請分開提及? –

+0

我輸入https://example.com/applications/258/infobox.xml,我的apache應該將它映射到我的CodeIgniter函數,該函數將我們的一個應用程序(ID爲258的應用程序)的數據保存在公司的CMDB以XML格式(如https://example.com/app/makeInfoBox/258/)。所以我嘗試訪問的xml文件Infobox.xml並不完全存在,它只是函數的輸出。 – Fuerro