Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
.htaccess htaccess将带有参数的规则重写到特定位置_.htaccess_Mod Rewrite_Hyperlink_Parameters - Fatal编程技术网

.htaccess htaccess将带有参数的规则重写到特定位置

.htaccess htaccess将带有参数的规则重写到特定位置,.htaccess,mod-rewrite,hyperlink,parameters,.htaccess,Mod Rewrite,Hyperlink,Parameters,我有一个页面,其中有一个链接: http://www.example.com/listings.php?packageType=luxury-travel 我想寄到: http://www.example.com/luxury-travel 而且: http://www.example.com/listings.php?packageType=luxury-travel&packageTypeSub=remote-luxury-retreats 转到: http://www.exa

我有一个页面,其中有一个链接:

http://www.example.com/listings.php?packageType=luxury-travel
我想寄到:

http://www.example.com/luxury-travel
而且:

http://www.example.com/listings.php?packageType=luxury-travel&packageTypeSub=remote-luxury-retreats
转到:

http://www.example.com/luxury-travel/remote-luxury-retreats
我使用了:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /listings.php?packageType=$1&packageTypeSub=$2 [L]
最终会影响我的其他页面,例如:

http://www.example.com/about-us
我也尝试过放置:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
以前。还尝试过玩:

RewriteCond %{QUERY_STRING} ^packageType=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &packageType=([^&]+) [NC]
RewriteRule ^([^/]*)$ /listings.php?packageType=$1 [L]
这给了我两个链接上的404错误。有人有什么想法吗?我本以为这是个简单的问题

在.htaccess文件中

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^\.*]+)/([^\.*]+)/?$ listings.php?packageType=$1&packageTypeSub=$2 [L,QSA]
RewriteRule ^/?([^\.*]+)/?$ listings.php?packageType=$1 [L,QSA]
试试这个:

RewriteEngine on

RewriteCond %{THE_REQUEST} \ /+listings\.php\? [NC]   
RewriteCond %{QUERY_STRING} (?:^|&)packageType=([^&]+)&packageTypeSub=([^&\s]+) [NC]
RewriteRule ^ /%1/%2? [R=301,NC,L]

RewriteRule ^([^/]+)/([^/]+)?$ /listings.php?packageType=$1&packageTypeSub=$2 [L]
请注意,如果只有
packageType
可用,则规则将重定向到
http://www.example.com/luxury-travel/
(请注意末尾的
/
),以帮助将其与
http://www.example.com/about-us


如果这不是一个选项,那么您应该添加专门提供页面/链接名称的规则。

我已经编辑并删除了一些开发代码,因为它不起作用

在进行了大量的头颅切割后,我终于找到了一个有效的解决方案:

# Rewrite specific pages - listings
# Allow packageType
RewriteCond %{THE_REQUEST} \ /+listings\.php\? [NC]   
RewriteCond %{QUERY_STRING} (?:^|&)packageType=([^&]+) [NC]
RewriteCond %{QUERY_STRING} !&packageTypeSub=([^&]+)
RewriteRule ^ /%1/? [R=301,NC,L]

# Allow packageTypeSub
RewriteCond %{THE_REQUEST} \ /+listings\.php\? [NC]   
RewriteCond %{QUERY_STRING} (?:^|&)packageType=([^&]+)&packageTypeSub=([^&\s]+) [NC]
RewriteRule ^ /%1/%2? [R=301,NC,L]

# Ignore the images folder allowing images to display
RewriteCond %{REQUEST_URI}  !(upload-images) [NC]
RewriteRule ^([^/]+)/([^/]+)?$ /listings.php?packageType=$1&packageTypeSub=$2 [L]

主要问题是上载图像文件夹被阻止,该文件夹包含站点包的所有图像。我成功地从重写规则中排除了这个文件夹,现在它似乎正在工作。谢谢大家的帮助。希望这对以后的其他人有所帮助。

谢谢你的帮助。尝试过这个,但似乎不起作用。在其他页面(如/contact等)上导致错误。对于以下链接也无法完全工作:Amend:设法使其正常工作,但其他链接存在问题?我已经编辑了原帖。谢谢拉维。我最终得到了这个的直接循环。谢谢拉维。我已经测试过了,它也确实有效。不过我确实有个问题。我应该提到,我还有其他需要定向的页面:我也需要处理:我也喜欢这样自动重定向,但出于某种原因,即使我有图像的绝对路径,也会遗漏一些。此外,自动重定向只适用于第二级。很好,你找到了一个解决方案!不过,最好保留原始问题,并将您的解决方案作为答案发布。这样,有类似问题的人可以找到他们的问题(你的问题)并找到解决方案。Cheers Lee,我保留了原来的问题,只是删掉了我添加的一些更新编辑,它们是无用的;)我懂了。但是从“解决方案”这个词到文章结尾的部分不属于这个问题。这是一个很好的答案,显然(它对你有用:))。所以鼓励你回答自己的问题,你甚至可以选择它作为公认的答案。