.htaccess
中的 /
文件
RewriteEngine on
RewriteCond %{HTTP_HOST} ^product.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.product.com$ [OR]
RewriteCond %{HTTP_HOST} ^product.com.au$ [OR]
RewriteCond %{HTTP_HOST} ^www.product.com.au$
RewriteRule ^(.*)$ https://www.company.com/product/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^company.com.au$ [OR]
RewriteCond %{HTTP_HOST} ^www.company.com.au$ [OR]
RewriteCond %{HTTP_HOST} ^companyalternate.com.au$ [OR]
RewriteCond %{HTTP_HOST} ^www.companyalternate.com.au$ [OR]
RewriteCond %{HTTP_HOST} ^company.com$
RewriteRule ^(.*)$ https://www.company.com/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
.htaccess
文件位于/product/blog/
RewriteEngine On
RewriteBase /product/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?article=$1
据我所知,URL重写正在按预期工作,直到我输入如下内容:
company.com.au/product/blog/test-article
在这种情况下,生成的url与输入的完全一致,但是从/product/blog/index.php
脚本中检索预期的内容。所以正在处理/product/blog/.htaccess
,但似乎/.htaccess
不是?
我希望将上述网址重定向到:
https://www.company.com/product/blog/index.php?article=test-article
并显示为:
https://www.company.com/product/blog/test-article
我哪里错了?
答案 0 :(得分:1)
正如在评论/回答中已经提到的那样,Apache .htaccess是每个目录的指令。 Apache仅使用最接近/最近的.htaccess,因此在您的情况下,仅使用/product/blog/.htaccess
并忽略/.htaccess
:
您可以在/product/blog/.htaccess
:
RewriteOptions InheritBefore
这将使父范围中的规则在子范围中指定的规则之前应用。
答案 1 :(得分:0)
这是来自官方文档,
.htaccess文件中的配置指令将应用于找到.htaccess文件的目录及其所有子目录。但是,重要的是还要记住,目录中可能存在.htaccess文件。指令按照找到的顺序应用。因此,特定目录中的.htaccess文件可能会覆盖在目录树中较高位置的.htaccess文件中找到的指令。反过来,这些可能已被覆盖的指令更高,或者在主服务器配置文件本身中。
http://httpd.apache.org/docs/trunk/howto/htaccess.html#how
我猜你的问题是为什么它没有被301重定向。
如果没有太多考虑,我会说它必须与已经提供的内容有关。如果已经提供了内容,则可能无法设置301标头。