我有2个简单的PHP文件:
product.php
product-options.php
在我的htaccess文件中,我有:
RewriteEngine On
RewriteRule ^product$ product.php [L]
RewriteRule ^options$ product-options.php [L]
RewriteRule ^product-([^/]+)/?$ product.php?id=$1 [L]
RewriteRule ^options-([^/]+)/?$ product-options.php?id=$1 [L]
当我打电话给“ mysite.com/product ”或“ mysite.com/product-MYID ”
时,一切正常但是当我打电话给“ mysite.com/options ”或“ mysite.com/option-MYID ”时,我看到了正确的网址,但该文件的内容是“product”/“product-MYID”!!!为什么???
PS:我需要两个文件都是可访问的,有没有GET?id = ID
答案 0 :(得分:1)
这是因为你的规则正在执行第二次,因为正则表达式是:
^product-([^/]+)/?$
哪个匹配/product-MYID
URI以及重写的URI:product-options.php
为了避免这种情况,您可以使用以下规则:
RewriteEngine On
# If the request is for a valid directory or file then skip rewrite rules
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^product/?$ product.php [L]
RewriteRule ^options/?$ product-options.php [L]
RewriteRule ^product-([^/]+)/?$ product.php?id=$1 [L,QSA]
RewriteRule ^options-([^/]+)/?$ product-options.php?id=$1 [L,QSA]
答案 1 :(得分:1)
或者您可以使用:
RewriteEngine On
RewriteRule ^product$ product.php [L]
RewriteRule ^options$ product-options.php [L]
RewriteRule ^product-([^/\.]+)/?$ product.php?id=$1 [L]
RewriteRule ^options-([^/\.]+)/?$ product-options.php?id=$1 [L]
因为,我认为,你不使用。在您的产品-...或选项-...