重写不起作用?

时间:2013-08-09 10:05:45

标签: php .htaccess

我正在尝试在我的000webhost帐户的htaccess文件中写一个rewritrule,但我找不到让它工作的方法!

所有文件都上传到根目录(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>

任何帮助都会很棒。

2 个答案:

答案 0 :(得分: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']);
 }

答案 1 :(得分:0)

要获得正确的“漂亮的网址”,你需要将丑陋的网址重定向到漂亮的网址,并在内部重写好的网址,以实现丑陋,实际工作的网址。你已经有了内部重写。

从Apache 2.3.9开始,您可以使用以下解决方案。 END - 标志在早期版本中不可用,并且在使用时会引发内部服务器错误。将R更改为R=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,但我确信我没有输入错字。