【问题标题】:URL Rewrite Rule not working .htaccessURL重写规则不起作用.htaccess
【发布时间】:2015-07-05 17:30:53
【问题描述】:

我正在尝试使用 .htaccess 文件重写 URL,但它不起作用。首先我在我的本地主机上尝试了很多,然后在我的 Live Server 上尝试了很多,但它没有工作。我仍然得到 原始网址。这就是我所拥有的......

原始网址:-

http://test.1click.com.pk/specific_hall.php?hall_name=Shalimar+Hall&hall_id=1

我想要:-

http://test.1click.com.pk/Shalimar+Hall.php

我的 .htaccess 文件:-

 <IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^([^/]*)\.php$ /specific_hall.php?hall_name=$1&hall_id=1 [L]
   </IfModule>

我仍然得到原来的 URL.. 谁能指出为什么重写规则不起作用?我尝试了很多都没有成功。提前致谢。

【问题讨论】:

  • 你总是想要 Shalimar-Hall.php 还是取决于 hall_name 的值?
  • 感谢@Sunil Pachlangia 的回复。我想要取决于 hall_name 的值..
  • 当你使用test.1click.com.pk/Shalimar+Hall.php url时会发生什么??
  • @sundar Bons 当我写这个 test.1click.com.pk/Shalimar+Hall.php 时它的工作,但是当我点击链接以获取特定的霍尔值时,它显示了原始的 Url..
  • 这就是它的作用。重写的工作原理

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您需要在新的 url 格式中包含 hall_id 参数才能将其重写。否则,mod_rewrite 无从得知。

你可以把这段代码放在你的root htaccess中

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/specific_hall\.php\?hall_name=([^\s&]+)&hall_id=(\d+)\s [NC]
RewriteRule ^ %2-%1.php? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(\d+)-([^/]+)\.php$ specific_hall.php?hall_name=$2&hall_id=$1 [L]

例子:

  1. http://example.com/specific_hall.php?hall_name=Shalimar+Hall&amp;hall_id=1 将重定向到http://example.com/1-Shalimar+Hall.php(不需要 更改文件中的链接)。
  2. http://example.com/1-Shalimar+Hall.php 将在内部重写为 (= 显示相同的内容) http://example.com/specific_hall.php?hall_name=Shalimar+Hall&amp;hall_id=1

【讨论】:

  • 感谢@Justin Lurman。它就像一个魅力。您能否更新此 .htaccess 文件以删除字符串之间的 + 符号。例如(Shalimar + Hall)。我想要 Shalimar Hall 或 Shalimar-Hall。提前致谢。
  • 不客气。是的,这是可能的。但是你能告诉我hall_name 是否可以包含任何破折号- 吗?因为如果Shalimar+Hall 变成Shalimar-Hall 并且您在其他人中有“本机”破折号,那将是一个问题。示例:如果hall_nameSomething-special,那么它将变为Something+special(这是不正确的)。实际上,您必须确保您选择的字符最初不在所有其他hall_name 可能的值中
  • 是的。 @justin Lurman hall_name 可以包含破折号 -...感谢您的回复和时间...
  • 那么由你来选择一个永远不会出现在hall_name中的特殊字符(或者你可以保留+,因为它对引用和seo没有问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多