htaccess的重写规则与参数传递到特定位置

问题描述:

我有有一个链接的页面:htaccess的重写规则与参数传递到特定位置

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] 

这最终影响了,我有,如其他页面:

​​

我也曾尝试把:

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] 
+0

感谢您的帮助。试过这个,但似乎没有工作。在其他网页(例如/ contact等)上导致错误。此外,对于以下链接也完全没有效果: http://www.example.com/luxury-travel/remote-luxury-retreats – 2015-02-23 07:18:47

+0

修正:管理得到它工作好,但有其他链接的问题?已编辑原始帖子。 – 2015-02-23 08:47:41

试试这个:

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这样的链接。

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

+0

谢谢拉维。我最终得到了这个重新直接循环。 – 2015-02-23 07:19:40

+0

@IanFraser请尝试更新。 – 2015-02-23 07:38:28

+0

谢谢拉维。我测试过它,它也可以工作。 我确实有问题。我应该提到我也有其他页面需要指导: http://example.com/location.php?place=vancouver 到 http://example.com/vancouver 另外我需要处理: http://example.com/product.php?packageType=luxury-travel&id=42 至 http://example.com/luxury-travel/private-touring/product-name/42 – 2015-02-23 08:36:10

我编辑并删除了一些开发代码,因为它不工作。

很多headscratching后,我终于发现了有效的解决方案:

# 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] 

的主要问题是,它包含所有站点包图像是被阻止上传图像文件夹中。我设法从重写规则中排除此文件夹,现在它似乎正在工作。感谢你的帮助。希望这将有助于未来的其他人。

+0

很棒,你找到了解决方案!但是,最好保留原始问题,并将解决方案作为答案发布。这样,有类似问题的人可以找到他们的问题(你的问题),并看到一个解决方案。 – 2015-02-24 07:04:13

+0

干杯李,我保留在原来的问题,刚刚剥离了一些更新编辑我补充说,没用;) – 2015-02-24 07:06:04

+0

我明白了。但是从解决方案*这个词到帖子末尾的部分不属于这个问题。这是一个很好的答案,显然(它对你有用:))。 SO鼓励回答你自己的问题,你甚至可以选择它作为接受的答案。 – 2015-02-24 07:09:55