我想将test.com重写为test.com/context。
浏览器返回重定向递归错误。
任何人都有线索?
我将下面的内容放在httpd-vhosts.conf中。
<VirtualHost *:80>
ServerName test.com
JkMount /* mschoi
ErrorLog logs/mschoi-error_log
CustomLog logs/mschoi-acces_log common
RewriteEngine On
RewriteRule ^/(.*)$ /context/$1 [L,R]
</VirtualHost>
httpd.conf
Include conf/extra/httpd-vhosts.conf
答案 0 :(得分:2)
这是一个简单的例子,当你重写时,你的规则再次匹配/context
。您可以使用RewriteCond
来避免它:
RewriteEngine On
# Rewrite only if the request doesn't already match /context
RewriteCond %{REQUEST_URI} !^/context
RewriteRule ^/(.*)$ /context/$1 [L,R]
如果正在访问的文件实际存在(而不是重写模式),您可以测试并不重写任何真实的现有文件:
RewriteEngine On
# If the requested resource is not actually a real file or directory (doesn't exist)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /context/$1 [L,R]
不仅每个目录规则都可能导致递归。在这种情况下,/(.*)
匹配任何并且无条件地附加到/content
是一件简单的事情。由于存在[R]
标志以进行重定向,并且每个标志都是新请求,因此它将成为重定向链:
/something
/content/something
/content/content/something
/content/content/content/something
后续重定向始终与前导/content
以及/(.*)
后面的内容保持匹配并附加到其中。