.htaccess将内容重写到子文件夹

用户137

我的Web服务器上具有以下文件夹结构:

资料夹结构

我需要一些重写规则:

  1. 当我访问时,http://testdomain1.com/我需要设置/pages/testdomain1.com/为根目录以显示该目录中的内容。

    同样,http://testdomain2.com/根文件夹是/pages/testdomain2.com/等。

  2. 当所请求的URL具有lavar时-我需要重写到登录目录。

    示例: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.htmlindex.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伪指令)不包含包含laURL参数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-9a-zA-Z_-la参数还必须是第一个URL参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将子域重写到文件夹后避免内容重复

htaccess将子域重写到文件夹

如果是特定文件夹,.htaccess 将规则重写到子文件夹

.htaccess-以静默方式将所有内容重写/重定向到内部子文件夹

htaccess url-将特定文件重写到子文件夹

htaccess将子域重写到某个文件夹(如果存在)

htaccess将网址页面重写到文件夹

.htaccess:内部重写到子文件夹,拒绝通过子文件夹进行访问

将所有请求重写到带有.htaccess文件的文件夹

Htaccess 将子文件夹重写为子域

.htaccess将文件夹重写到其他index.php

IIS 域重写到子文件夹(仅限主页)

.htaccess将URL重写为模拟的子文件夹

apache 重写 - 将 url 重写到子文件夹,但如果某个段在 url 中,则不重写

htaccess重写子文件夹?

.htaccess将父文件夹重写为子文件夹

.htaccess 将所有内容重定向到“/public”,但子文件夹中的“/blog”除外

htaccess用子目录中的参数重写到根文件夹

htaccess url 从请求查询重写到文件夹,如并更改 php 名称

htaccess将URL重写为子文件夹中的查找文件

htaccess 用最终的子文件夹重写 url

在子文件夹中用.htaccess重写不起作用

子文件夹的htaccess重写规则(漂亮的url)

.htaccess重写未知子文件夹的规则

htaccess重写不起作用的子文件夹

如何在子文件夹中用“ .htaccess”重写链接?

如何将URL规则重写到根文件夹而不是其子目录?

PHP Cors/将文件夹中的图片重写到其他域

htaccess将变量重写为漂亮的文件夹结构