说我有以下网站:
与
相同我想知道我是否可以获得这样的东西
http://site.example.com/var/
使用apache2的mod_rewrite。
这是我的尝试:
RewriteEngine on
RewriteRule ^([^/\.]+)$ /site/?var=$1
当网址为http://example.com/site时,这就像魅力一样,但由于我只是一个初学者,我不知道如何让它适用于http://site.example.com。
任何帮助都会非常感激。
答案 0 :(得分:3)
第一部分将example.com/site/var
重定向到site.example.com/var
。
第二次重写规则,在site.example.com中重写您的网址,
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^(www\.)?example.com/site/(.*)
RewriteRule (.*) http://site.example.com/%1 [R=301,L]
RewriteRule ^([^/\.]+)$ /site/?var=$1 [L]
说明:
RewriteEngine on
这一行打开了重写引擎。否则它可能无法工作。
RewriteBase /
这一行设置了重写基础。当需要为每个目录重写设置基本URL时,此指令使用。默认值是当前物理路径,但在大多数情况下,URL中的URL与物理文件名路径直接相关,因此使用默认值是错误的。例如,当使用虚拟目录时,你应该正确地将此选项设置为mod_rewrite表现得很好。
RewriteCond%{HTTP_HOST}%{REQUEST_URI} ^(www。)?example.com/site /(.*)
在这一行中,第一个apache连接到变量(主机地址:www.example.com
并请求URI:/site/var
)。然后用我给出的模式检查结果。结果的第一个可以为www.
之后应该是example.com/site/
,最后它可以是任何东西。
RewriteRule (.*) http://site.example.com/%1 [R=301,L]
该行使用301状态代码将用户请求重定向到http://site.example.com/%1
。因为它有L
标记它是最后一次重写规则apache检查。%1
是在重写条件下由(.*)
标记的所有内容。
RewriteRule ^([^/\.]+)$ /site/?var=$1 [L]
此行是您在问题中添加的行:它会重写每个没有/
且点缀为/site/?var=$1
的网址。
答案 1 :(得分:1)
我找到了解决方案:
RewriteBase /
某些主机需要RewriteBase
规范才能正常运行。
我希望这有帮助。