1
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ product.php?ref=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ /category.php?sub=$1 [L]

使用变量 sub 发送的值与来自 ref 的值冲突

product.php?ref=$1 [L]
category.php?sub=$1 [L]
4

2 回答 2

2

我对任何类型的旨在某种形式的语义 URL 的重写规则的建议,即:

/home

代替

index.php?page=home

制定一条捕获所有 URL 的规则,例如:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ handler.php?__url=$1 [QSA]

然后让 handler.php 弄清楚你想做什么。

你知道你的类别和产品,所以如果 URL 是/[product|category]然后处理它。

于 2013-10-01T15:14:30.587 回答
1

只需稍作改动,以下代码就可以工作:

Options +FollowSymLinks -MultiViews
RewriteEngine On 

# don't do anything for a valid file or directory
RewriteCond %{ENV:REDIRECT_STATUS} !^$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Product handler /i/test
RewriteRule ^i/([^/]+)/?$ /product.php?ref=$1 [L,NC,QSA]

# PHP handler
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [L]

# category handler
RewriteRule ^([^/]+)/?$ /category.php?sub=$1 [L,QSA]
于 2013-10-01T15:51:02.423 回答