【问题标题】:PHP APACHE URL rewritingPHP APACHE URL 重写
【发布时间】:2013-08-30 08:01:28
【问题描述】:

我已经在网上搜索了整整 2 个小时,现在尝试了不同的东西,但我发现的都不起作用。

我想重定向到一个不存在的文件夹,然后将其转换为查询字符串 - 例如指向“domain.com/test/”的锚标记,但 .htaccess 应该拦截它并将其更改为“ domain.com/index.php?p=test" 在幕后,观众看不到查询字符串

我不确定我做错了什么,但我已经在谷歌上尝试了几乎所有的东西——至少第一页和第二页:P

非常感谢任何帮助。

【问题讨论】:

标签: php apache .htaccess url


【解决方案1】:

mod_rewrite 具有属性测试,允许您测试请求的 url 是文件还是目录。见the documentation

要使用它,您可以使用RewriteCond 来测试%{REQUEST_FILENAME}。然后,您可以重定向或内部重写 url。重定向会明显改变客户端的 url,而内部重定向只会显示不同的页面而不实际更改 url。

#The requested url is NOT a directory AND NOT a file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [L]

如果您希望发生外部重定向,请添加R-标志。 R=301 标志将使重定向永久化,但只有在所有规则都按您期望的那样工作时才使其永久化。

【讨论】:

  • 好的,我已经尝试过了,我可以转到 /Test/p/Home 等,但所有相关链接以及 sql 函数都已损坏 - 所以我不确定我是否喜欢这个。 .. PS。 /Test 是我的域根目录中的文件夹想要在 URL 中显示此“localhost:8888/Test/Home”,但 php 应将其解释为 localhost:8888/Test/?p=Home
  • 尝试使用RewriteBase /Test/。 mod_rewrite 不会更改页面上的链接,因此如果相关链接损坏,您必须更改其他内容。
  • 好吧,它的工作原理我只是不得不不使用 /p/Home,因为我正在尝试......有没有办法检测它使用什么?所以例如。 ?p=Home 将转到 /Home 而 /refresh=213124123 将转到 /refresh/213124123?或类似的东西 - 基本上检测哪个查询字符串被调用:)
  • 使用RewriteCond %{QUERY_STRING} ^p=(.*)$%1 作为替换,使用RewriteCond %{QUERY_STRING} !^p=RewriteCond %{QUERY_STRING} ^([^=]+)=(.*)$%1%2 作为替换。阅读文档并搜索有关如何使用它们的示例。
  • 我不确定它是如何工作的 - Apache 和正则表达式是我很难学习的东西:/ 你能证明整个代码吗?因为当我寻找示例时,我总是设法以某种方式将它们搞砸:P
猜你喜欢
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2012-02-27
  • 2010-10-30
  • 2011-12-19
  • 2012-11-22
  • 1970-01-01
相关资源
最近更新 更多