我的Web服务器上具有以下文件夹结构:
我需要一些重写规则:
当我访问时,http://testdomain1.com/
我需要设置/pages/testdomain1.com/
为根目录以显示该目录中的内容。
同样,http://testdomain2.com/
根文件夹是/pages/testdomain2.com/
等。
当所请求的URL具有la
var时-我需要重写到登录目录。
示例:http://testdomain1.com/?la=template1
-设置/lands/template1/
为根目录
我目前的工作有一些问题.htaccess
(针对第一个任务):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$
RewriteRule ^(/)?$ pages/%{HTTP_HOST}/index.html [L]
重写规则有效,但所有资产数据(js,css)均无效(未找到404)。如何设置正确的规则?
...但是所有资产数据(js,css)均无效(未找到404)。如何设置正确的规则?
这很可能是由于使用资产的相对URL路径引起的。您需要将URL路径“固定”为相对于根目录或绝对根目录。这不是应该固定的内容.htaccess
,否则可以重写。
请参阅我对网站管理员堆栈上以下问题的回答,该问题与在使用URL重写时使用相对URL静态资产的路径有关:
RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$ RewriteRule ^(/)?$ pages/%{HTTP_HOST}/index.html [L]
这仅重写对根的请求,即。testdomain1.com/
。不是testdomain1.com/foo
-那是故意的吗?
我不仅需要访问任何页面(
example.com/page.html
)index.html
。
如果那意味着您要将表格的请求http://testdomain1.com/foo
重写为/pages/testdomain1.com/foo
,那么您需要将以上内容更改为以下内容:
RewriteCond %{QUERY_STRING} !^la=[\w-]+
RewriteCond %{HTTP_HOST} ^(?:www.)?(testdomain1\.com)$
RewriteRule !^pages/ pages/%1%{REQUEST_URI} [L]
请注意,这将重写所有内容,包括CSS,JS和图像。
第一个条件(RewriteCond
伪指令)不包含包含la
URL参数的URL。(这些URL在下面处理。)
这也修复了您现有指令www.testdomain1.com
中的错误,该错误导致对www子域(例如)的请求将导致错误的重写。将%1
在逆向引用替换字符串包含被请求的域名-少一个可选的www
子域。(我假设您没有子目录www.testdomain1.com
?)尽管可以争辩说,您应该早已在配置文件中对www / non-www进行了规范化。
(请记住以逃避文字点。)
更新:
我尝试将这种情况用于多个域,而不仅用于
testdomain1.com
。所以我需要改变RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$
部分。我只是尝试了,RewriteCond %{REQUEST_URI}
但是没有工作。
对于多个域,您可以:
为每个域复制以上代码块,并testdomain1.com
在第二种情况下更改域。
如果这仅适用于3个域,则可以在第二种情况下使用轮换来匹配3个域中的任何一个。例如:
RewriteCond %{HTTP_HOST} ^(?:www.)?(testdomain1\.com|testdomain2\.com|testdomain3\.com)$
如果这适用于任何域,则使正则表达式更通用以匹配任何域。例如:
RewriteCond %{HTTP_HOST} ^(?:www.)?([a-z0-9.-]+?)\.?$
2)当请求URL具有“ la”变量时-我需要重写到登陆目录。
示例:http://testdomain1.com/?la=template1
-设置/lands/template1/
为根目录
如我的评论中所述,您可能不应该将其重写为目录。处理请求的不是目录,而是文件。通过重写目录,我假设您依靠mod_dir发出目录索引文档的内部子请求(由DirectoryIndex
伪指令指定)。为了这个示例,我将假定目录索引为index.php
。
这需要在上面的重写之前进行,因为它更具体:
RewriteCond %{QUERY_STRING} ^la=([\w-]+)
RewriteRule ^$ /lands/%1/index.php [L]
%1
(与相对$1
)是对最后匹配的CondPattern中捕获的模式的反向引用。正则表达式[\w-]+
的限制la
参数值的字符0-9
,a-z
,A-Z
,_
和-
。该la
参数还必须是第一个URL参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句