1

我一直在在线阅读一些教程并在这里搜索了其他几个问题,但我似乎无法掌握使用 HTACCESS 文件重写动态 URL 的方法。

我有如下网址:

products.php?cat=2
products.php?cat=3
products.php?cat=4

我希望他们只说 products/2 例如

equipment.php?cat=2&subCat=1
equipment.php?cat=2&subCat=2
equipment.php?cat=2&subCat=3

例如,我希望这些说设备/2/1

product.php?id=3010-Z89CH24

例如,我希望这些说 product/3010-Z89CH24

但到目前为止,我只是想改变products.php页面:

    RewriteEngine On
RewriteCond %{HTTP_HOST} ^*******\.com [NC]
RewriteRule (.*) http://www.*******.com/$1 [L,R=301]

Options +FollowSymLinks

RewriteRule ^products/'^([1-9][0-9]{0,2})'$ http://www.*******.com/products.php?cat=/$2 [L] 
# REMOVE PHP EXTENSIONS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]

问题是我不认为结尾部分“/$2”是正确的,我也不确定其余部分:/

无论哪种方式,它都不适合我,我被困住并努力理解它:(

有人能帮助我吗?

4

3 回答 3

1

启用mod_rewrite.htaccess通过httpd.conf然后将此代码放入您的 DOCUMENT_ROOT/.htaccess文件中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.php\?cat=([^\s&]+)&subcat=([^\s&]+)\s [NC]
RewriteRule ^ /%1/%2/%3? [R=301,L]

RewriteRule ^([^/.]+)/([^/]+)/([^/]+)/?$ /$1.php?cat=$2&subcat=$3 [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.php\?cat=([^\s&]+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L]

RewriteRule ^([^/.]+)/([^/]+)/?$ /$1.php?cat=$2 [L,QSA]
于 2013-09-26T13:59:02.660 回答
0

希望这可以帮助你...

http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/

使用 PHP 重写 URL

于 2013-09-26T13:48:19.663 回答
0

您的问题是您的正则表达式是错误的 - 我建议您查看某种基本的正则表达式教程,注意提及捕获组。

如果不检查-并假设您的基于数字的限制是正确的-我猜您想要这样的规则:

RewriteRule  ^/products/([1-9][0-9]{0,2})$  /products.php?cat=$1 [L]

如果您需要保留现有的查询字符串,您可能也需要 QSA 标志。

于 2013-09-26T13:54:30.723 回答