所以我试图让.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
比较重定向和重映射时的日志输出显示它几乎完全相同。
我做错了什么?
答案 0 :(得分:0)
尝试这样
Options -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^applications/([\d]+)/infobox.xml$ app/makeInfoBox/$1/ [L]