【问题标题】:Mod_Rewrite: How to rewrite just the main domain, not any other folders/files?Mod_Rewrite:如何只重写主域,而不是任何其他文件夹/文件?
【发布时间】:2011-12-14 00:50:29
【问题描述】:

问题是:我有一个很长的 htaccess,做了很多重定向(它是一个商店网站,它会将 STOREID/p/PRODUCTID 之类的东西重定向到 productdetail.php?s=STOREID&p=PRODUCTID 等。我想要允许特定商店拥有直接域名的能力。因此,您转到 examplestore.com,它会访问 mysite.com/stores,然后 htaccess 将其重写为 mysite.com/stores/STOREID。我已经完成了这项工作,除了一方面:

我可以让主页出现,或者产品/搜索/等页面出现,但不能同时出现。

这是我的 htaccess 的相关部分:

RewriteEngine on
RewriteCond %{HTTP_HOST}   ^(www\.)?EXAMPLESTOREDOMAIN\.com$ [NC]
RewriteRule /?$ /6804/  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /6804/$1    [QSA]

稍后在 htaccess 中,它适用于 /p/ 之类的东西,所有这些都很好用。 6804 是商店 id,htaccess 稍后会抓取它并将其作为 url 变量转储到 php 中。

我可以删除第一条规则,然后其他一切正常。或者我可以有第一条规则,其他的都行不通。规则的顺序也没有关系。

以下是应该发生的情况: http://EXAMPLESTOREDOMAIN.com --> mystore.com/stores/6804/ --> mystore.com/stores/storeindex.php?s=6804 http://EXAMPLESTOREDOMAIN.com/p/22/ --> mystore.com/stores/6804/p/22 --> mystore.com/stores/productdetail.php?s=6804&p=22

第二个重写步骤效果很好。第一个,不多。而且我会使用第二条规则中的每一条进行设置,以单独在每个域上工作,但我不想这样做,并且如果我们拥有几百个商店域,我不想拥有那么大的 htaccess...

提前致谢!

【问题讨论】:

    标签: apache mod-rewrite url-rewriting


    【解决方案1】:

    您需要第一个条件也适用于第二个规则,因为它只影响第一个规则。这就是为什么当您删除第一条规则时,第二条规则有效。 RewriteCond 仅应用它们之后的第一个 RewriteRule。 RewriteCond %{HTTP_HOST} ^(www\.)?EXAMPLESTOREDOMAIN\.com$ [NC] 只需复制并放在第二个 RewriteRule 上方即可。

    【讨论】:

    • 这是必要的,但事实证明我在第一个重写规则上错过了一个 ^。一旦我做了这两件事,它就起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多