我有用于测试.htaccess
的文件,这是我的文件:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([a-z-]+)/?$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%{SERVER_NAME}/?title=%1 [L]
我正在使用来自ApacheLounge的Apache/2.4.10 (Win32)
我有以下域和子域:
- 例子.com
- m.example.com
两者都指向相同的 IP 地址,正如我从上面所期望的那样.htaccess
:
如果我访问example.com/Article-Name/
重定向example.com/?title=Article-Name
将是internal,我将无法?title=Article-Name
在我的 url 栏上看到。
这是一个例外:
如果我访问m.example.com/Article-Name/
重定向m.example.com/?title=Article-Name
将是外部的,现在我m.example.com/?title=Article-Name
在我的 url 栏中看到。
所以我期待同样的行为,如果有人有想法,我会非常感激。
编辑:
我已经找到了问题的解决方案,但我仍然对上述问题感兴趣,关于解决方案是使用:
RewriteRule ^ ?title=%1 [L]
请注意:这个解决方案只需要m.example.com,我真的不知道这个解决方案是如何工作的,我发布了这个解决方案,因为它可能有助于找到上述问题的原因,以及这个解决方案是如何工作的.
编辑 2(完整的 .htaccess 文件):
RewriteEngine On
<If "%{HTTP_HOST} = 'avielfadida.ml'">
# The actual condition is really long one so I replaced it for illustration.
RewriteCond %{HTTP_USER_AGENT} (iPhone|Blackberry|Android) [NC]
RewriteRule ^ http://m.%{HTTP_HOST}%{REQUEST_URI} [R,L]
# I have to duplicate the RewriteCond and RewriteRule both inside the <If> and <Else>
RewriteCond %{REQUEST_URI} ^/([a-z-]+)/?$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%{HTTP_HOST}/?title=%1 [L]
# The solution(the solution is not required inside this block):
#RewriteRule ^ /?title=%1 [L]
</If>
<ElseIf "%{HTTP_HOST} = 'm.example.com'">
# I have to duplicate the RewriteCond and RewriteRule both inside the <If> and <Else>
RewriteCond %{REQUEST_URI} ^/([a-z-]+)/?$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%{HTTP_HOST}/?title=%1 [L]
# The solution(the solution is required here):
# RewriteRule ^ /?title=%1 [L]
DirectoryIndex /m/index.htm /m/index.php /m/index.html
</ElseIf>
重要说明:完整的 .htaccess 文件与问题之间没有关系,此更新的原因是我犯了一个错误的可能性很小,无论如何我只用问题中的 3 行测试了 .htaccess 文件。
最后更新:
RewriteEngine On
# The actual condition is really long one so I replaced it for illustration.
RewriteCond %{HTTP_USER_AGENT} (iPhone|Blackberry|Android) [NC]
RewriteCond %{HTTP_HOST} !^m\.example\.com$ [NC]
RewriteRule .* http://m.example.com%{REQUEST_URI} [R,L]
RewriteCond %{REQUEST_URI} ^/([a-z-]+)/?$ [NC]
RewriteRule .* /?title=%1 [L]
<If "%{HTTP_HOST} = 'm.avielfadida.ml'">
DirectoryIndex /m/index.htm /m/index.php /m/index.html
</If>
您使用相对路径的方式是正确的
来自Apache 文档
m.example.com
将被视为不同的主机,因此 Apache 执行外部重定向。因此,为了确保只执行内部重写,您需要像之前那样使用相对路径。您还可以从 .htaccess 文件中删除很多内容。我认为这应该做你正在寻找的。