我不知道如何质疑,但我的问题就像这样
我为网址写了一条规则
RewriteRule ^mysite.com.pk/([a-zA-Z0-9]+) index.php?store=$1
RewriteRule ^mysite.com.pk/([a-zA-Z0-9]+)/products index.php?store=$1&view=products
RewriteRule ^mysite.com.pk/([a-zA-Z0-9]+)/products/([0-9]+) index.php?store=$1&view=products&category=$2
RewriteRule ^mysite.com.pk/([a-zA-Z0-9]+)/single/([0-9]+) index.php?store=$1&view=single&product=$2
我是htaccess
的新手,所以我对此并不了解。是否有一种方法,即使旧的网址出现index.php?store=abc&view=single&product=123
这将被重定向到新的mysite.com.pk/abc/single/123
答案 0 :(得分:1)
您必须对提议的规则进行一些小修改才能使其正常运行。而且你必须添加额外的重写规则来实现你的实际要求:重定向" old"新语法的URL。
这可能就是你要找的东西:
RewriteEngine on
RewriteRule ^/?([a-zA-Z0-9]+)$ index.php?store=$1 [END]
RewriteRule ^/?([a-zA-Z0-9]+)/products$ index.php?store=$1&view=products [END]
RewriteRule ^/?([a-zA-Z0-9]+)/products/([0-9]+)$ index.php?store=$1&view=products&category=$2 [END]
RewriteRule ^/?([a-zA-Z0-9]+)/single/([0-9]+)$ index.php?store=$1&view=single&product=$2 [END]
# index.php?store=xyz&view=single&product=123
RewriteCond %{QUERY_STRING} store=([^&]+)&?
RewriteCond %{QUERY_STRING} view=single&?
RewriteCond %{QUERY_STRING} product=([^&]+)&?
RewriteRule /?index.php$ /%1/single/%3 [END,R=301]
# index.php?store=xyz&view=products&product=123
RewriteCond %{QUERY_STRING} store=([^&]+)&?
RewriteCond %{QUERY_STRING} view=products&?
RewriteCond %{QUERY_STRING} category=([^&]+)&?
RewriteRule /?index.php$ /%1/products/%3 [END,R=301]
# index.php?store=xyz&view=products
RewriteCond %{QUERY_STRING} store=([^&]+)&?
RewriteCond %{QUERY_STRING} view=products&?
RewriteRule /?index.php$ /%1/products [END,R=301]
# index.php?store=xyz
RewriteCond %{QUERY_STRING} store=([^&]+)&?
RewriteRule /?index.php$ /%1 [END,R=301]
这些规则 在真实的http主机配置中的.htaccess
样式文件和中的工作方式相同。请参阅下面的说明。
如果您使用的是旧版本的apache http服务器,则可能需要用END
标志替换L
标志。如果您收到"内部服务器错误"请尝试(http状态500)并且服务器在错误日志文件中抱怨END
标志。在这种情况下,您可能必须添加一些其他条件以防止无限重写循环。
请注意,我没有测试该规则集。我希望它不包含任何愚蠢的错误,你当然必须测试它。
以上所有内容均假设mysite.com.pk
与您的主机名("域")相匹配。但这不起作用,因为RewriteRules
处理请求路径,而不是完整的URL。如果要将规则的应用限制为特定主机,则可以添加前导条件以停止重写过程:
RewriteCond %{HTTP_HOST} !^mysite\.com\.pk`
RewriteRule .* - [END]
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用.htaccess
样式文件。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。