Mod_Rewrite:如何只重写主域,而不是任何其他文件夹/文件?

时间:2011-12-14 00:50:30

标签: apache mod-rewrite url-rewriting

问题在于:我有很长的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 ...... / p>

提前致谢!

1 个答案:

答案 0 :(得分:1)

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