Php 冲突的mod_重写规则

Php 冲突的mod_重写规则,php,apache,.htaccess,mod-rewrite,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 ^(.+[^/])/$

这是我的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字符串
(当前工作并显示正确的内容)

/travel/category
(当前工作并显示正确的内容)

/travel/category/subcat
(当前根据需要显示URL,但返回travel.php内容,而不是travel2.php)


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

来自最后3条重写规则:

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

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

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
因此,匹配的URL应该是:

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

谢谢-我知道这一点。我补充了我的问题,以澄清我正在寻找一种解决方法,我希望完全避免这类事情-这就是我删除ID的原因。如果$_GET[“related string”]存在,我会首先尝试。我是一个PHP/mod_rewrite新手-当页面内容类型不同时,必须有一种方法可以在一致的文件夹结构中获取URL,就像很多网站一样。如果有更好的办法,我会全神贯注的!我想到了另一个避免前缀/后缀的主意。我的两个不同的表都有各自独特的字段,因此我可以使用PHP检查字段是否存在。然后,页面显示与我检查的表中是否存在该字段相关的内容。True,但是仅仅检查一个字段名是否存在并不像在50多条记录中循环那样糟糕。对,但是纯粹从
mod_rewrite
进行检查比通过
php+数据库查询进行检查要好。是否可以添加一个唯一的字符串来区分每个记录中出现的模式与该字段,但是用mod_rewrite删除那个唯一的字符串?例如,如果每个标题url字符串都以xxx结尾,如“title url string=example xxx”