mod_rewrite“太多重定向”问题

时间:2009-11-30 23:05:00

标签: mod-rewrite rewrite

尝试,

  <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 / *

感谢

2 个答案:

答案 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标志并从重写文件中删除了完整的服务器地址。