Php 使用HTACCESS重新写入动态URL
我一直在网上阅读一些教程,并在这里搜索了几个其他问题,但我似乎无法掌握使用HTACCESS文件重新编写动态URL的方法 我有如下网址:Php 使用HTACCESS重新写入动态URL,php,regex,.htaccess,mod-rewrite,url-rewriting,Php,Regex,.htaccess,Mod Rewrite,Url Rewriting,我一直在网上阅读一些教程,并在这里搜索了几个其他问题,但我似乎无法掌握使用HTACCESS文件重新编写动态URL的方法 我有如下网址: products.php?cat=2 products.php?cat=3 products.php?cat=4 我希望他们只说产品/2为例 equipment.php?cat=2&subCat=1 equipment.php?cat=2&subCat=2 equipment.php?cat=2&subCat=3 product.ph
products.php?cat=2
products.php?cat=3
products.php?cat=4
我希望他们只说产品/2为例
equipment.php?cat=2&subCat=1
equipment.php?cat=2&subCat=2
equipment.php?cat=2&subCat=3
product.php?id=3010-Z89CH24
例如,我想说设备/2/1
equipment.php?cat=2&subCat=1
equipment.php?cat=2&subCat=2
equipment.php?cat=2&subCat=3
product.php?id=3010-Z89CH24
例如,我想说product/3010-Z89CH24
equipment.php?cat=2&subCat=1
equipment.php?cat=2&subCat=2
equipment.php?cat=2&subCat=3
product.php?id=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”是正确的,我也不确定它的其余部分:/
不管怎样,它对我都不起作用,我被卡住了,努力去理解它:(
有人能帮我吗?希望这能帮助你
希望这能帮助你
您的问题在于您的regexp是错误的-我建议您查看一些基本的正则表达式教程,注意提到的捕获组 如果不进行检查,并假设您基于数字的限制是正确的,我猜您需要这样的规则:
RewriteRule ^/products/([1-9][0-9]{0,2})$ /products.php?cat=$1 [L]
如果您需要保留现有的查询字符串,您可能也需要QSA标志。您的问题是您的regexp是错误的-我建议您查看一些基本的正则表达式教程,注意有关捕获组的内容 如果不进行检查,并假设您基于数字的限制是正确的,我猜您需要这样的规则:
RewriteRule ^/products/([1-9][0-9]{0,2})$ /products.php?cat=$1 [L]
如果您需要保留现有的查询字符串,您可能也需要QSA标志。通过
httpd.conf
启用mod\u rewrite
和.htaccess
,然后将此代码放入文档根目录/.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]
通过
httpd.conf
启用mod_rewrite
和.htaccess
,然后将此代码放入文档根目录下.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]
这让我比以前更进一步了,但出于某种原因,页面加载时没有任何样式,并且丢失了大量内容?知道为什么吗?你遇到了人们在切换到漂亮URL时面临的最常见问题:)修复也很简单,只需确保使用js、css的绝对路径,图像等。路径需要以
/
或http://
谢谢:)开始,这确实有效…但我必须在整个站点中使用绝对路径?这将需要大量的工作,该网站是相当大的只是一个更新。我发现如果我把“”放在我的网站上解决问题的部分。幸运的是,我所有的页面都在根目录中,因此基本URL可以工作:)我很快就联系到了:/我快速清除了缓存和cookies等,我的页面重新加载,没有样式…即使我使用样式表等的绝对路径,这也让我比以前走得更远,但由于某些原因,页面加载了没有任何样式和大量内容缺失?你知道为什么吗?当人们切换到漂亮的URL时,你遇到了最常见的问题:)修复也很简单,只需确保对js、css、图像等使用绝对路径。路径需要从/
或http://
谢谢:)开始,这确实有效……但我必须在整个站点中使用绝对路径?这将需要大量的工作,该网站是相当大的只是一个更新。我发现如果我把“”放在我的网站上解决问题的部分。幸运的是,我所有的页面都在根目录中,因此基本URL可以工作:)我很快就联系到了:/我快速清除了缓存和Cookie等内容,我的页面返回到没有样式的加载状态……即使我使用了样式表的绝对路径,我也无法做到这一点。在那里尝试不同的正则表达式,但它只会给我内部服务器错误。我不能用这个。在那里尝试不同的正则表达式,但它只会给我内部服务器错误。在我来这里之前,Salready找到了顶部链接。不幸的是,尽管他们的解释看起来很简单。他们不是为我工作。很明显,我做错了什么,但我不知道那是什么。在我来这里之前,我已经找到了那个顶级链接。不幸的是,尽管他们的解释看起来很简单。他们不是为我工作。很明显,我做错了什么,但我不知道那是什么:/仍然需要帮助这个家伙:(仍然需要帮助这个家伙:(