Nat*_*per 4 apache .htaccess mod-rewrite httpd.conf
我正在尝试重定向所有必须的网址/__/并/public/assets/让它在 .htaccess 中工作,但不能在 httpd.conf 中全局工作它应该做的是重写:
http://example.com/__/test.css
到
http://example.com/public/assets/test.css
到目前为止,我已经为 .htaccess 工作了:
RewriteRule ^(.*)/?__/(.*)$ $1/public/assets/$2 [L]
Run Code Online (Sandbox Code Playgroud)
(这可能写得不正确,但这是我设法使其发挥作用的唯一方法)。然而,如果我把它放在 httpd.conf 中,它根本不起作用。我试着调整它,尝试把它放进去<VirtualHost 127.0.0.1>,放进去<Directory "c:/DEV/wamp/www/">,但还是不行。现在已经在这上面浪费了 3 个小时的时间,并在 Stackoverflow/论坛上找到了很多例子,但奇怪的是它们都不适合我。
编辑: 这是我尝试过的两个块的示例。[R] 是验证规则是否有效并重定向:
<VirtualHost 127.0.0.1>
DocumentRoot "c:/DEV/wamp/www/"
<Directory "c:/DEV/wamp/www/">
Allow From All
RewriteEngine On
RewriteRule ^/(.*)?__/(.*)$ /$1public/assets/$2 [R]
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
和这个:
<Directory "c:/DEV/wamp/www/">
Allow From All
RewriteEngine On
RewriteRule ^/(.*)?__/(.*)$ /$1public/assets/$2 [R]
</Directory>
Run Code Online (Sandbox Code Playgroud)
EDIT2: 尝试从建议的答案中进行选择编辑,仍然无法在服务器上找到css文件。
<Directory "c:/DEV/wamp/www/">
Allow From All
RewriteEngine On
RewriteRule ^__/(.*)$ public/assets/$1 [L]
</Directory>
Run Code Online (Sandbox Code Playgroud)
RewriteRule ^/(.*)?__/(.*)$
RewriteRule您已在容器中的模式中添加了斜杠前缀<Directory>。这应该与您的 .htaccess 文件中的相同,即。没有目录前缀。
.htaccess 文件和<Directory>容器在这方面的行为相同。仅当指令直接位于服务器配置 / VirtualHost 容器中时,才应包含目录前缀(但它与 URL 路径匹配,而不是文件系统路径,就像在 .htaccess / Directory 上下文中一样)。
如果将其放入<Directory>容器中,则无需“调整它”。
我正在尝试重定向
严格来说,这是内部重写(就像您在 .htaccess 文件中一样),而不是外部重定向。
/__/<file>到/public/assets/<file>
RewriteRule ^(.*)/?__/(.*)$ $1/public/assets/$2 [L]
/__/如果始终发生在 URL 路径的开头,则可以简化此重写。在 .htaccess 文件或<Directory>容器中尝试以下操作:
RewriteRule ^__/(.*)$ public/assets/$1 [L]
Run Code Online (Sandbox Code Playgroud)
如果您在测试 .htaccess 和服务器配置中的容器之间切换<Directory>,并且想知道为什么容器中的指令<Directory>没有执行任何操作,那么 .htaccess 中的 mod_rewrite 指令可能完全覆盖容器中的指令<Directory>。这是默认行为。.htaccess 指令将优先,默认情况下不会继承父指令。
一般来说,如果您在服务器配置中使用<Directory>容器,则不需要 .htaccess,因此最简单的选择是在容器中使用 .htaccess 禁用<Directory>它们AllowOverride None。所以,<Directory>容器看起来像:
<Directory "c:/DEV/wamp/www/">
Allow From All
AllowOverride None
RewriteEngine On
RewriteRule ^__/(.*)$ public/assets/$1 [L]
</Directory>
Run Code Online (Sandbox Code Playgroud)
如果您需要在 .htaccess 和父<Directory>容器中都包含 mod_rewrite 指令,那么您需要通过在 .htaccess 中放置以下指令来显式启用 mod_rewrite 继承:
RewriteOptions Inherit
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Apache 2.4,那么您有更多选择。
您不能简单地禁用 .htaccess (即RewriteEngine Off)中的重写引擎,因为这也会阻止处理父指令。RewriteEngine如果您只是从 .htaccess 中删除该指令,那么容器RewriteEngine On中的指令<Directory>将启用重写引擎,但会导致 .htaccess 指令再次覆盖父级指令,因此您又回到需要该RewriteOptions Inherit指令的情况。
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |