冲突的mod_rewrite规则

时间:2017-09-20 16:25:34

标签: php apache .htaccess mod-rewrite

这是我的htaccess文件中的完整重写代码集,但我只是在最后3条规则中遇到冲突问题。最终规则写下我想要的URL,但返回travel.php而不是travel2.php

RewriteEngine On
Options +FollowSymLinks
RewriteCond %{http_host} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^journal/([^/]*)$ /journal2.php?url=$1 [L]

RewriteRule ^travel/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ travel.php?country=$1&url_string=$2
RewriteRule ^travel/([a-zA-Z0-9-]*)$ /travel2.php?cat=$1
RewriteRule ^travel/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ travel2.php?cat=$1&subcat=$2

这是我在过去3年之后所做的事情:

/travel/country/title-url-string(目前有效并且显示正确的内容)

/travel/category(目前有效并且显示正确的内容)

/travel/category/subcat(当前显示我想要的网址,但返回travel.php内容而不是travel2.php)

我最初在travel.php规则中有一个ID号,删除它导致了冲突。我知道有两个规则具有相同的模式,那么我怎样才能最好地获得我想要的结果呢?谢谢你的帮助。 :)

1 个答案:

答案 0 :(得分:1)

从最近3次重写规则:

1& 3检查相同的模式,第一个模式始终生效。

此外,由于您的类别和国家/地区值在此处无法相互区分,我建议在网址中附加唯一标识符,如下所示:

RewriteRule ^travel/country-([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ travel.php?country=$1&url_string=$2
RewriteRule ^travel/category-([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ travel2.php?cat=$1&subcat=$2

所以你的匹配网址是:

/travel/country-countryname/title-url-string
/travel/category-categoryname/subcat