.htaccess从子目录重写

时间:2013-04-11 20:52:21

标签: .htaccess mod-rewrite

对此有任何帮助真的很感激。

我在.htaccess文件中设置301重定向,将数百个旧网址重定向到最新的实时网页。

我的.htaccess文件当前位于域的根目录中,如下所示:

RewriteCond %{QUERY_STRING} ^pName=product-one$ [OR]
RewriteCond %{QUERY_STRING} ^pName=product-two$ [OR]
RewriteCond %{QUERY_STRING} ^pName=completely-different-name$
RewriteRule ^catalog/product_info.php$ http://www.mydomain.com/new-product-name-p-123.html? [R=301,L]

在研究如何使用.htaccess批量重定向到一个URL的答案时,我读到了更改.htaccess文件的位置并将其放在它应用的特定目录中的明智之举,因此请求其他目录甚至不会遵守这些规则。

所以我将.htaccess文件放在特定的子目录中,这是目录,但重定向不再有效。我在这里错过了什么?我希望将url的规则重定向到目录文件夹中的.htaccess文件中,这样每次加载根.htaccess时都不会加载所有重写规则。

2 个答案:

答案 0 :(得分:0)

我建议你更改你的重定向301行,直接包含OSCommerce目录文件夹的路径。

所以不要使用

RewriteRule ^catalog/product_info.php$ http://www.mydomain.com/new-product-name-p-123.html? [R=301,L]

使用例如:

Redirect 301 /website/catalog http://www.mydomain.com/page2.htm

Redirect 301 /catalog http://www.mydomain.com/page2.htm

选项1)是您的目录位于http://youdDomain.com/website/catalog/。 如果它位于http://youdDomain.com/website/aaa/catalog/,您将使用:

Redirect 301 /website/aaa/catalog http://www.mydomain.com/page2.htm

我在自己的网络服务器上对此进行了测试 - 希望有所帮助。

答案 1 :(得分:0)

将.htaccess放在子目录中时,必须相应地调整RewriteRule模式。 mod_rewrite剥离.htaccess文件所在的目录前缀,请参阅RewriteRule - What is matched?

您必须将规则更改为

RewriteRule ^product_info.php$ ...

如果您有许多要重写的网址路径,您可能还需要查看RewriteMap