.htaccess重写以重定向两个不同的文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess重写以重定向两个不同的文件夹相关的知识,希望对你有一定的参考价值。

如果url命中重定向到两个导航。

第一个条件:一些国家的产品信息已经建成

www.example.com/product-india  => product-india/index.php
www.example.com/product-us  => product-us/index.php

第二个条件:剩下的国家正在动态建设

www.example.com/product-japan => product/index.php
www.example.com/product-australia => product/index.php
www.example.com/product-uk => product/index.php

等等其他国家

我尝试过的:

RewriteEngine on
RewriteRule ^/product-india /product-india/index.php [L]
RewriteRule ^/product-us /product-us/index.php [L]
RewriteRule ^/product-* /product/index.php?cat=$1 [L]

但页面只满足这个条件

RewriteRule ^/product-* /product/index.php?cat=$1 [L]

在我的代码中出了什么问题。请帮助我,并提前感谢

答案

目前还不清楚你想要实现什么目标,但我们可以提出两点建议......

顺便说一句... ^/product-*不是你想要的正则表达式。我们必须假设你并不真正知道如何构建正则表达式。我建议你开始阅读它们。在处理简单的文本分析任务时,它们对于开发人员来说是一个非常重要且强大的工具。

这里有两个工作内部重写的建议(你自己没有实现任何外部重定向):

你在写的问题中提出的一个简单的内部重写:

RewriteEngine on
RewriteRule ^/?product-india/?$ /product-india/index.php [END]
RewriteRule ^/?product-us/?$ /product-us/index.php [END]
RewriteRule ^/?product-\w*/?$ /product/index.php [END]

另一个将“国家”作为类别论点递交:

RewriteEngine on
RewriteRule ^/?product-india/?$ /product-india/index.php [END]
RewriteRule ^/?product-us/?$ /product-us/index.php [END]
RewriteRule ^/?product-(\w+)/?$ /product/index.php?cat=$1 [END]

如果您使用这些规则(“内部服务器错误”)收到http状态500,则可能是您运行的是非常旧版本的apache http服务器。在这种情况下,用旧的[END]标志替换[L]标志,最有可能在这里同样合适,但这取决于您的具体设置。

上述规则集同样适用于真实的http服务器主机配置和动态配置文件。

并提供一般性提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。只有在您无法控制主机配置(读取:非常便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)的情况下,它们才被支持作为最后一个选项。 )。

另一答案

您可以在站点根目录中使用此规则.htaccess:

RewriteEngine On

# if <uri>/index.php exists then use it
RewriteCond %{DOCUMENT_ROOT}/$1/index..php -f
RewriteRule ^([\w-]+)/?$ $1/index.php [L]

# otherwise use product/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(product-\w+)/?$ product/index.php?cat=$1 [L,QSA"NC]

以上是关于.htaccess重写以重定向两个不同的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess使用URL中的#item重写站点以进行直接文件访问

IIS重写规则以重定向URL

如何更改我的网址的特定部分以更改语言编辑.htaccess

.htaccess重写合并

.htaccess url 重写用于 ssl https 重定向

.htaccess 重定向到 404 页面 RewriteRule