1

我正在处理的 wordpress 站点已移至子目录中,因此来自其他站点的所有链接都不再起作用。我用 .htaccess 实现了一个 301 重定向,这很好,因为它解决了这个问题,但是旧的根目录现在有一个index.html我的客户绝对希望看到的登录页面。

那么,我如何设置我.htaccess将所有流量重定向到子目录(以修复传入链接)除了根目录中的 index.html,因为它具有登录页面。

我不知道 htaccess 如何运作良好,但这就是我现在所拥有的。

Order deny,allow
ErrorDocument 404 /404.php
DirectoryIndex index.php index.html

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/$ [OR]
RewriteRule ^.*$ http://example.com/portal/$0 [R=301,L]

谢谢!!

编辑澄清:现在一切都从根重定向到子目录。我希望除根目录中的 index.html 之外的所有内容都重定向。http://example.com如果用户只请求域名(

4

1 回答 1

1

以下代码可以满足您的要求:“如果请求不匹配index.php或不匹配index.html“/”(即不匹配)(并且匹配不区分大小写),则提供备用位置”

Order deny,allow
ErrorDocument 404 /404.php
DirectoryIndex index.php index.html

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index\.(php|html) [NC]
RewriteCond %{REQUEST_URI} !^/$ {NC]
RewriteRule ^.*$ http://example.com/portal/$0 [R=301,L]

我已经使用优秀的在线测试工具http://htaccess.madewithlove.be对此进行了测试

使用以下测试用例:

http://example.com                -- no rewrite, second condition not met
http://example.com/               -- ditto
http://example.com/index.html     -- first condition not met
http://example.com/index.php      -- first condition not met
http://example.com/some/page.html -- rewritten as http://example.com/portal/some/page.html

编辑你说这仍然没有像预期的那样工作;所以我拿出了大枪。通过打开重写引擎对指令所做的一切的“最大日志记录”

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 9

(显然,选择您想要的任何路径),然后在终端窗口中查看日志文件的末尾

tail -f /var/log/apache2/rewrite.log

您可以快速查看哪些地方工作不正常。一些摆弄使我得到了以下代码。它说“如果请求的 URI 只是/index.htmlor /index.php,或者它以 开头/portal,或者它是空白的,那么不要重定向。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index\.(php|html) [NC]
RewriteCond %{REQUEST_URI} !^/portal.*$ [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteRule ^(.*)$ http://example.com/portal$0 [R=301,L]

测试用例对我有用——看看它们是否对你有用!

注意:我在文件中进行了这些更改httpd.conf,而不是在.htaccess根目录的文件中。您需要小心,以便.htaccess甚至读取根目录中的文件 - 默认的 Apache 配置具有Override none该目录,因此需要一些额外的工作。通过将此配置更改放在httpd.conf文件中(并发出sudo apachectl restart命令),您可以避免困难。根据谁托管您的网站以及您拥有什么控制权,这可能不是您的选择。可能会找到解决这个问题的专家superuser.com而不是SO......但我希望这对你有用。

于 2013-06-14T01:53:11.033 回答