【问题标题】:.htaccess remove .php and add url parameter.htaccess 删除 .php 并添加 url 参数
【发布时间】:2020-09-15 17:07:06
【问题描述】:

我有这个网址http://localhost/signUp.php?url={somevalue} 我想把它改成这样:

http://localhost/signUp/{somevalue}

我怎样才能对所有页面执行此操作,而不仅仅是使用 .htaccess 的 signUp.php?

我已经知道如何删除 .php 但我不知道如何添加参数。

#Remove .php from url
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L] 

【问题讨论】:

  • 请不要只要求我们为您解决问题。向我们展示您是如何尝试自己解决问题的,然后向我们确切展示结果是什么,并告诉我们您为什么觉得它不起作用。向我们明确解释什么不起作用并提供a Minimal, Complete, and Verifiable example。阅读How to Ask 一个好问题。请务必take the tour 并阅读this
  • @JayBlanchard 我编辑了这个问题,谢谢。
  • 对“somevalue”是否有任何限制,或者它可以是 anything(斜线除外)吗?

标签: php .htaccess server


【解决方案1】:

除非您有其他要求,否则您不需要将“删除”.php 作为单独的规则。您有 /signUp/{somevalue} 必须重写为 /signUp.php?url={somevalue}

这可以通过这样的规则来实现:

Options -MultiViews

RewriteEngine On

RewriteRule ^(signUp)/([^/.])+$ $1.php?url=$2 [L]

如果您限制 somevalue 不包含点或斜线,则无需检查请求是否未映射到文件。除非/signUp 也作为目录存在,否则这不太可能映射到目录。

somevalue 必须包含 1 个或多个字符。如果您有进一步的限制,那么这应该包含在正则表达式中。


更新:

谢谢,但这只适用于注册,我怎样才能让它在所有页面上都起作用?

假设“所有页面”由来自文档根目录的 4 个或更多字符的单个路径段组成,仅包含字符 a-zA-Z0-9_(下划线)和 -(连字符)然后将上面的RewriteRule 更改如下:

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([\w-]{4,})/([^/.])+$ $1.php?url=$2 [L]

这确实会在重写请求之前检查相应的 .php 文件是否存在,尽管如果您没有其他指令,这可能不是绝对必要的。

【讨论】:

  • 谢谢,但这仅适用于注册,我怎样才能使它在所有页面上都有效?
猜你喜欢
  • 2014-03-04
  • 2016-01-02
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2011-03-02
  • 2015-07-21
相关资源
最近更新 更多