尝试,
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteCond %{HTTP_HOST} ^(.*)dev\.example\.edu$ [NC]
RewriteRule ^/test(.*)$ http://dev.example.edu/test/index.php/test$1 [NC]
</IfModule>
在apache 2.2服务器上,让这个重写工作隐藏路径的“index.php / test”部分。
我试过的所有内容都会在地址栏中循环url部分(index.php / test)或者出现“太多重定向”错误。
我怀疑双方的“测试”部分正在抛弃,但我不确定如何让它发挥作用。
我只想要: dev.example.edu/test/index.php/test* 重写为: dev.example.edu/test / *
感谢
答案 0 :(得分:1)
您需要排除目标路径以避免无限递归:
RewriteCond %{HTTP_HOST} ^(.*)dev\.example\.com$ [NC]
RewriteCond $1 !^/index\.php/test/
RewriteRule ^/test/(.*)$ http://dev.example.com/test/index.php/test/$1 [NC]
此处检查第一个分组($1
)的匹配项是否与^/index\.php/test/
不匹配。
但是如果你想将/test/index.php/test/…
重写为/test/…
,你宁愿需要这条规则:
RewriteCond %{HTTP_HOST} ^(.*)dev\.example\.com$ [NC]
RewriteRule ^/index\.php/test/(.*)$ http://dev.example.com/test/$1 [NC]
答案 1 :(得分:0)
Per Jim at webmasterworld(谢谢!)
“[P]标志向指定URL的服务器调用反向代理请求;也就是说,它会打开一个新的外出HTTP连接并向该服务器发送请求。至少,你的只需使用原始工作规则,配置速度就应该是原来的两倍,因为您的服务器通过HTTP向自己发送新请求,而不是仅仅从非默认映射文件路径提供内容。
在我看来,所需要的只是内部重写,以便在URL处请求资源 http://dev.example.edu/distribution/与服务器文件路径/distribution/index.php/distribution/“
中的脚本生成的内容一起提供RewriteEngine on
#
# Return 403-Forbidden response to TRACE requests
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
#
# Internally rewrite requests for URL-path /recreation/<anything>
# to filepath /eel/index.php/recreation/<anything>
RewriteCond %{HTTP_HOST} ^dev\.example\.edu [NC]
RewriteRule ^/recreation/(.*)$ /ee1/index.php/recreation/$1 [L]
#
# Internally rewrite requests for URL-path /distribution/<anything>
# to filepath /distribution/index.php/distribution/<anything>
RewriteCond %{HTTP_HOST} ^dev\.example\.edu [NC]
RewriteRule ^/distribution/(.*)$ /distribution/index.php/distribution/$1 [L]
所以我认为我只是让它变得更加复杂。我删除了P标志并从重写文件中删除了完整的服务器地址。