有没有一种方法可以用htaccess更改php URL



我正在尝试更改:

example.com/profile.php?id=abcdefgh

简单地说:

example.com/abcdefgh 

我在StackOverflow上搜索了一下,我明白我需要对我的.htaccess做点什么,我尝试了这个代码:

RewriteEngine On
RewriteRule ^([^/]*)$ /profile.php?id=$1 [L]

但似乎没有什么变化,当键入这个URL(example.com/profile.php?id=abcdefgh(时,它不会被重写。

附言:我不知道上面的代码是否正确,我试过了,因为我从哪里得到的代码也有类似的问题。

这应该可以工作。

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ profile.php?id=$1 [QSA,L] 

您应该请求"漂亮"的URL,即/abcdefgh。然后,您在.htaccess中的mod_rewrite指令在内部将其重写为实际处理请求的"真实"URL(即/profile.php?id=$1(。该指令需要一个形式为/abcdefgh的URL。然而,在它的当前状态下,我应该期待一个重写循环:

  1. 请求/abcdefgh
  2. 请求被重写为/profile.php?id=abcdefgh
  3. 处理重新开始
  4. 请求被重写为/profile.php?id=profile.php(因为正则表达式^([^/]*)$与重写的URL的profile.php部分匹配
  5. 转到#3

在本例中,您可以通过简单地使RewriteRule模式(regex(更具限制性来避免重写循环。例如,在否定字符类中包含一个点(.((假设您的新"漂亮"URL不包含点(。

例如:

RewriteRule ^([^/.]+)$ /profile.php?id=$1 [L]

然后,您需要实际将网站上的URL更改为新的"漂亮"URL。

然而,如果你目前得到的是404,那么可能根本没有处理这个指令?是否启用了.htaccess文件?您的.htaccess文件中有其他指令吗?

更新:在id中,只允许使用A-Z 字符

在这种情况下,您应该更具体地使用正则表达式,只匹配所需的字符。这有助于避免冲突,并在一定程度上避免文件系统检查的需要,而文件系统检查相对来说是"昂贵的"。但是,请注意,您已经声明了"A-Z",但您的示例中包含小写字母。为了便于论证,我假设id可以包括a-z和a-z。

所以,现在变成了:

RewriteRule ^([a-z]+)$ /profile.php?id=$1 [NC,L]

不需要其他文件系统检查(之前的RewriteCond指令(。NC(nocase(使正则表达式匹配不区分大小写。

不需要检查请求是否映射到文件(具有前面的条件(,因为regex^([a-z]+)$永远无法匹配文件(包括文件扩展名(。

也不需要检查请求是否映射到目录,除非您直接请求文档根目录中的目录——这可能"不太可能"。然而,其中存在与该URL结构固有的冲突。如果您需要能够访问一个目录,那么这些目录名将成为无效的ID,因此您需要在系统的其他地方进行其他检查,以确保没有生成映射到文档根目录中物理目录的ID。

相关内容

  • 没有找到相关文章

最新更新