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