0

我正在尝试在我的000webhost帐户上的 htaccess 文件中编写重写规则,但我找不到让它工作的方法!

所有文件都上传到根目录(public_html)。该.htaccess文件也位于同一目录中。

在 URL 地址栏中,我得到如下内容:domain.com/index.php?city=London

我需要将其更改为domain.com/city/London

但似乎没有任何东西可以通过htaccess文件!

这是我的 htaccess 代码:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L]
</IfModule>

任何帮助都会很棒。

4

2 回答 2

0

您的 htaccess 工作正常。万一用户访问该页面domain.com/index.php?city=LondonYou,您可以重定向他。按标题位置。

 header("Location: city/".$_GET['city']);

现在您只需要知道,用户何时可以通过 htacces 访问,何时不可以。只是使用一些技巧。

RewriteRule ^city/([^/]*)$ /index.php?city=$1&accessByHtaccess [L]

有条件。

 if(!$_GET['accessByHtaccess ']){
   header("Location: city/".$_GET['city']);
 }
于 2013-08-09T10:22:48.370 回答
0

要获得正确的“漂亮 url”,您需要将丑陋的 url 重定向到漂亮的 url,并在内部将漂亮的 url 重写为丑陋的、实际工作的 url。您已经进行了内部重写。

从 Apache 2.3.9 开始,您可以使用以下解决方案。-END标志在早期版本中不可用,并且在使用时会引发内部服务器错误。更改RR=301以使重定向永久化。仅当所有重定向和重写都按您希望的方式工作时才执行此操作,因为浏览器将缓存永久重定向。END 标志将完全停止重写,并防止无限循环。

RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING} city=([^&]*)
RewriteRule ^index\.php$ /city/%1? [R,L]

RewriteRule ^city/([^/]*)$ /index.php?city=$1 [END]

在早期版本的 Apache 中,您需要使用 hack。这是可行的,因为%{THE_REQUEST}仅在外部请求时才可用,而不是在重写 url 时:

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php\?city=(.*)\s [NC]
RewriteRule ^ city/%1? [R,L]

RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L]

请注意,我无法在这台计算机上测试 RewriteRule,但我很确定我没有打错字。

于 2013-08-09T10:59:42.770 回答