mod_rewrite重新映射无法正常工作

时间:2016-09-28 09:25:37

标签: php apache .htaccess mod-rewrite

所以我试图让.htaccess文件工作,重新映射我的Web服务的一些URL。我的.htaccess文件中有以下代码:

 # 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工作正常。但为什么我的Webservice规则不起作用?

它应该将https://example.com/applications/258/infobox.xml重新映射到https://example.com/app/makeInfoBox/258/还是不应该重命名?

当我添加[R] Flag时它确实有效,但我不想重定向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]

我现在已经使用高日志级别激活了日志记录。这是记录的内容:

添加路径信息postfix:/ etc / apache2 / htdocs / webservices / applications - > /etc/apache2/htdocs/webservices/applications/258/infobox.xml

strip per-dir前缀:/etc/apache2/htdocs/webservices/applications/258/infobox.xml - >应用/ 258 / infobox.xml

将模式'^ applications /([0-9] +)/ infobox \ .xml $'应用于uri'applications / 258 / infobox.xml'

重写'applications / 258 / infobox.xml' - > '应用程序/ makeInfoBox / 258 /

添加每个dir前缀:app / makeInfoBox / 258 / - >的/ etc / apache2的/ htdocs中/ web服务/应用/ makeInfoBox / 258 /

strip per-dir前缀:/ etc / apache2 / htdocs / webservices / app / makeInfoBox / 258 / - >应用程序/ makeInfoBox / 258 /

将模式'^(。*)$'应用于uri'app / makeInfoBox / 258 /'

RewriteCond:input ='/ etc / apache2 / htdocs / webservices / app / makeInfoBox / 258 /'pattern ='! - f'=>匹配

RewriteCond:input ='/ etc / apache2 / htdocs / webservices / app / makeInfoBox / 258 /'pattern ='! - d'=>匹配

重写'app / makeInfoBox / 258 /' - > '/index.php?/app/makeInfoBox/258 /'

split uri = / index.php?/ app / makeInfoBox / 258 / - > uri = / index.php,args = / app / makeInfoBox / 258 /

尝试使用/

替换前缀/ etc / apache2 / htdocs / webservices /

尝试使用上下文前缀替换上下文docroot / etc / apache2 / htdocs / webservices

使用/index.php进行内部重定向[内部重定向]

strip per-dir前缀:/etc/apache2/htdocs/webservices/index.php - >的index.php

将模式'^ applications /([0-9] +)/ infobox \ .xml $'应用于uri'index.php'

strip per-dir前缀:/etc/apache2/htdocs/webservices/index.php - >的index.php

将模式'^(。*)$'应用于uri'index.php'

RewriteCond:input ='/ etc / apache2 / htdocs / webservices / index.php'pattern ='! - f'=>不匹配

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

比较重定向和重映射时的日志输出显示它几乎完全相同。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试这样

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