【问题标题】:How to rewrite URL with country name and all links with / after country name如何用国家名称重写 URL 以及在国家名称之后带有 / 的所有链接
【发布时间】:2019-06-10 10:19:50
【问题描述】:
我想用 php 和 javascript 开发一个应用程序,我想在其中提及城市名称以及网站 url,即www.website.com/cityname,它应该打开网站www.website.com。同样对于其他页面,它应该类似于www.website.com/cityname/pagename.php。
请提供解决方案如何实现这一点以及如何在整个应用程序生命周期中维护 Web URL www.website.com/cityname?
我可以找到带有网站 url 的城市名称,但它没有找到页面并显示错误。
【问题讨论】:
标签:
javascript
php
url-routing
【解决方案1】:
城市名称必须是 URL 的一部分。
查看您使用的网络服务器的 URL 重写配置。例如,在 Apache HTTPd 中,您可以定义重写规则。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^/]+)$ /index.php?city=$1 [QSA,L]
这两个条件避免了将实际规则应用于现有文件或目录。该规则本身捕获只有一个路径部分的 URL(没有 /)并将它们重定向到 index.php,并将城市添加为查询字符串参数。
PHP 脚本无法检查参数。您可以将其存储在 cookie 中或以 HTML 格式输出以使用 JavaScript 访问它。
将其保存在 URL 中更加困难。 URL 必须看起来像 http://example.com/cityname/。尾部斜杠使浏览器将其识别为路径级别,因此target.php 之类的链接将被解释为http://example.com/cityname/target.php - 在 URL 中保留城市名称。但是您必须非常小心 HTML 输出中的相对链接和绝对链接。尾部斜杠的重写规则也必须更改。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^/]+)/ /index.php?city=$1 [QSA,L]