htaccess RewriteRule,带有参数到特定位置

时间:2015-02-23 03:31:53

标签: .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.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错误。有人有主意吗?本来以为这本来就是一个简单的!

3 个答案:

答案 0 :(得分:0)

在.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]

答案 1 :(得分:0)

试试这个:

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等链接区分开来。

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

答案 2 :(得分:0)

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

经过大量的讨论后,我终于找到了一个有效的解决方案:

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

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