从字面上看,我对此束手无策。我在 stackoverflow 上研究了许多其他问题和答案,但仍然找不到我需要的解决方案。我开始认为我想做的事情是不可能的。
所以……问题是这样的。我想打开以下内容:例如
www.mydomain.com/visa-information/country.php?country={COUNTRY-NAME}&passport={PASSPORT-NAME}
到以下漂亮的网址:
www.mydomain.com/visa-information/{COUNTRY-NAME}-visa-for-{PASSPORT-NAME}-citizens/
我的 htacces 文件中有一个部分成功的规则,如下所示:
RewriteRule ^/visa-information/([A-Za-z-]+)-visa-for-([A-Za-z-]+)-citizens/?$ visa-information/country.php?country=$1&passport=$2 [NC]
如果我在浏览器地址栏中输入网址,它可以正常工作并且可以满足我的要求,但我遇到的真正问题是通过我在几乎每个页面上都有的表单将它重定向到漂亮的网址地点。
我尝试了各种重定向规则,如下所示:
RewriteCond %{QUERY_STRING} country=([A-Za-z-]+)&passport=([A-Za-z-]+) [NC]
RewriteRule visa-information/country.php visa-information/%1-visa-for-%2-citizens/? [R,NC,L]
但没有运气。我也尝试将 QSA 标志添加到上述重定向规则中,但它最终以无限循环结束。
我尝试使用 country.php 页面顶部的位置 php 重定向标头在表单提交后重新定向,如下所示:
if(isset($_GET['country']) && isset($_GET['passport'])) {
header("Location: " . $dir . "/visa-information/" . $currentCountry . "-visa-for-" . $currentPassport . "-citizens/");
exit();
}
我期待上面的工作就像直接在浏览器中输入漂亮的 url 一样工作,但事实并非如此,只是给了我一个 404 错误。
任何帮助是极大的赞赏。
谢谢
约达什
编辑
我的本地目录结构如下:
/webserver/mydomain.com/visa-information/etc...
在实时服务器上,它将是:
mydomain.com/visa-information/etc..
当我在本地机器上使用 Apache Alias 时,我将 RewriteBase 设置为:
RewriteBase /webserver/mydomain.com/
我目前有以下一组 RewriteRules 改编自 anubhava 给我的内容:
RewriteCond %{REQUEST_URI} visa-information/country.php [NC]
RewriteCond %{QUERY_STRING} country=([A-Za-z-]+)&passport=([A-Za-z-]+) [NC]
RewriteRule visa-information/ visa-information/%1-visa-for-%2-citizens/? [R=301,L,QSA]
# internal redirect from pretty URL to old URL
RewriteRule ^visa-information/([A-Za-z-]+)-visa-for-([A-Za-z-]+)-citizens/?$ visa-information/country.php?country=$1&passport=$2 [NC,L]
目前,这给了我一个无休止的重定向循环,无论是在浏览器栏中输入漂亮的 url 时,还是使用我的表单时,但是如果我禁用前 3 条规则,那么我发现我可以将漂亮的 url 输入到地址栏和重写工作,但当然不是来自表单提交。
我真的不知道我做错了什么。为什么会有无限循环?