我正在尝试进行基本的URL重写,但无法使其正常运行。
我想通过我的wordpress.foobar.com
文件将所有请求重定向到.htaccess
到本地符号链接的WordPress安装:
RewriteEngine On
RewriteCond %{SERVER_NAME} ^wordpress\.foobar\.com$
RewriteRule ^(.*) /html/wordpress/$1 [L]
虽然我可以完美访问foobar.com/html/wordpress
,但访问wordpress.foobar.com
会引发500内部服务器错误。
Apache的错误日志将包含以下内容:
[error] [client 12.123.123.123] Request exceeded the limit of 10 internal redirects due to
probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get
a backtrace.
当我启用调试LogLevel时,我可以看到Apache正在尝试无限地重写favicon.ico
,总是追加另一层/html/wordpress/
,直到达到递归限制。
这次重写有什么问题?
答案 0 :(得分:1)
使用:
RewriteCond %{SERVER_NAME} ^wordpress\.foobar\.com$
RewriteCond %{REQUEST_URI} !/html/wordpress/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /html/wordpress/$1 [L]
通过-f
和-d
测试,您不会重定向现有文件和目录。这样,您可以避免favicon.ico
的问题(如果您有该文件,我建议您添加,如果不是这样)。
答案 1 :(得分:0)
当您收到错误Request exceeded the limit of 10 internal redirects due to
probable configuration error.
时,请问自己一个问题:我如何设计我的规则以在某个时候终止,以及为什么它不会终止。
在您的情况下,您的规则与所有内容相匹配。条件的状态也不会改变,因此如果您的规则匹配一次,它将匹配无限次。如果您重写为确实存在的文件,这可能适用于某些设置。通过测试/html/wordpress/
是否已经在网址中来阻止它重写不止一次是更安全的选择:
RewriteCond %{SERVER_NAME} ^wordpress\.foobar\.com$
RewriteCond %{REQUEST_URI} !/html/wordpress/
RewriteRule ^(.*)$ /html/wordpress/$1 [L]
除此之外,我不确定wordpress是否会识别您重写的网址。那是你要弄明白的。