URL重写可选参数

时间:2016-05-08 13:48:34

标签: php apache .htaccess mod-rewrite

我试图获取原始网址properties.php?bed=1&page=1&perpage=12&area=testarea/search/1/1/12/testarea。但是最后一个查询字符串' area'是可选的,所以可能是空白的。

我到目前为止还有这个,问题是如果我添加一个额外的([^ /] +)/这样和

RewriteRule search/([^/]+)/([^/]+)/([^/]+)/([^/]+)/? pages/properties.php?bed=$1&page=$2&perpage=$3&area=$4

然后不在网址中提供区域,它无法正常工作。在查询sting可以是可选的情况下,有没有正确的方法呢?

我还有另一个问题是我想要这个

RewriteRule search-rooms/([^/]+)/([^/]+)/([^/]+)/? pages/rooms.php?bed=$1&page=$2&perpage=$3&area=$4

是/ search / rooms / not / search-rooms /但是如果我在搜索后添加额外的/它再次无法正常工作,页面会从URL中读取错误的数据。

这是完整版

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule property/([^/]+)/? pages/show.php?id=$1 [NC,L]
RewriteRule search/([^/]+)/([^/]+)/([^/]+)/? pages/properties.php?bed=$1&page=$2&perpage=$3&area=$4 [L,QSA,NC]
RewriteRule search-rooms/([^/]+)/([^/]+)/([^/]+)/? pages/rooms.php?bed=$1&page=$2&perpage=$3&area=$4 [L,QSA,NC]
RewriteCond %{HTTP_HOST} ^www.studentlettingsagency.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^studentlettingsagency.co.uk$
RewriteRule ^(.*) http://www.stla.co.uk/$1 [QSA,L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
</IfModule>

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

您可以使用以下规则:

request

RewriteCond %{REQUEST_URI} !^/search/rooms RewriteRule search/([^/]+)/([^/]+)/([^/]+)/?([^/]*)?/?$ pages/properties.php?bed=$1&page=$2&perpage=$3&area=$4 [NC,L] RewriteRule search/rooms/([^/]+)/([^/]+)/([^/]+)/?([^/]*)?/?$ pages/rooms.php?bed=$1&page=$2&perpage=$3&area=$4 [NC,L] 在这里很重要,因为它告诉第一条规则不匹配uri RewriteCond