【问题标题】:url rewriting in php localhost with .htaccess not working使用.htaccess在php localhost中重写url不起作用
【发布时间】:2012-10-31 17:53:21
【问题描述】:

我想重写网址 来自

http://localhost/Ent/Movie/Info.php?year=2011&movie=any_movie

http://localhost/Ent/Movie/Info/2011/any_movie

我在 .htaccess 中尝试过很多代码,比如

Options +FollowSymLinks 
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /Ent/Movie/
RewriteRule ^Info/([0-9]+)/([a-zA-Z0-9]+)$ Info.php?year=$1&movie=$2 [L]

这里请注意,我的 .htaccess 文件位于网站的根目录中。

我的 .htaccess 位置是否错误 .htaccess 中的代码?

【问题讨论】:

标签: php .htaccess url-rewriting apache2


【解决方案1】:

从外部将浏览器重定向到看起来更漂亮的 URL(不带查询字符串):

RewriteCond %{THE_REQUEST} ^(GET|HEAD|POST)\ /Ent/Movie/Info\.php\?year=([^&]+)&movie=([^&\ ]+)([^\ ]*)
RewriteRule ^ /Ent/Movie/Info/%2/%3?%4 [L,R=301]

然后在内部重写它

RewriteRule ^/?Ent/Movie/Info/([0-9]+)/(.*)$ /Ent/Movie/Info.php?year=$1&movie=$2 [L,QSA]

这些规则位于文档根目录中,它们将位于:

Options +FollowSymLinks 
RewriteEngine on

【讨论】:

  • “外部”和“内部”是什么意思?
  • @Downloadmore External 表示发送给浏览器或发送请求的人的响应是“你想要的东西已经移动了,去这里拿”,这取决于浏览器去获取它。它在服务器外部,服务器以重定向响应,这就是故事的结尾。内部意味着浏览器发送请求,服务器内部(都在服务器内部)重写请求并通过其内部 URL 处理管道将其发送回,也许在这一切结束时,它将内容发送给浏览器,浏览器对此一无所知所有内部重定向
  • @Downloadmore 另请参阅此答案的顶部:stackoverflow.com/a/11711948/851273
【解决方案2】:
RewriteRule ^Info/([0-9]+)/([a-zA-Z0-9]+)$ Info.php?year=$1&movie=$2

会在相反的方向匹配重写,因此您需要将逻辑反转为:

RewriteRule ^Info.php?year=([0-9]+)&movie=([a-zA-Z0-9]+)$ Info/$1/$2

第一个是您要匹配的内容,第二个参数是您要生成的模式。 请参阅mod_rewrite tutorial

【讨论】:

  • @Petr .htaccess 文件的位置应该是指在根位置或 Ent 文件夹或电影文件夹中
  • 不知道 - 检查文档。 :) 我的猜测是,如果你把它放到 Movie 中,你可以摆脱 RewriteBase - 但这只是一个猜测。
  • 无法匹配重写规则中的查询字符串
猜你喜欢
  • 1970-01-01
  • 2014-06-06
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多