2016-09-28 122 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