Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用HTACCESS重新写入动态URL_Php_Regex_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 使用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

我一直在网上阅读一些教程,并在这里搜索了几个其他问题,但我似乎无法掌握使用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.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找到了顶部链接。不幸的是,尽管他们的解释看起来很简单。他们不是为我工作。很明显,我做错了什么,但我不知道那是什么。在我来这里之前,我已经找到了那个顶级链接。不幸的是,尽管他们的解释看起来很简单。他们不是为我工作。很明显,我做错了什么,但我不知道那是什么:/仍然需要帮助这个家伙:(仍然需要帮助这个家伙:(