【问题标题】:Rewrite URL regular expression重写 URL 正则表达式
【发布时间】:2011-04-29 13:59:24
【问题描述】:

我想重写这个网址:

http://www.mysite/folder/dept/accounting/name.php?id=12

到

http://www.mysite/folder/dept/accounting/name/12

我找到了使用 .htaccess 重写 URL 的示例,但是当相关目录不是 TLD 时,它们似乎不起作用。

【问题讨论】:

  • 请发布您目前尝试过的一些 .htaccess 指令。
  • RewriteEngine on RewriteRule ^name/[0-9][0-9]*$ /name.php?id=$1 [L]
  • 我认为您的问题倒退了...您希望请求 http://www.mysite/folder/dept/accounting/name/12 转到 http://www.mysite/folder/dept/accounting/name.php?id=12,对吗?
  • 不,我要 id=12 去 /name/12

标签: php regex .htaccess


【解决方案1】:
RewriteEngine On

RewriteRule ^(folder/dept/accounting/name)/(\d+)/?$ $1.php?id=$2

【讨论】:

  • 我可以将此添加到 /accounting 中的 .htaccess 文件中,还是必须将其添加到我无权访问的顶级 .htaccess 文件中?
  • @John 如果将其添加到/accounting,请删除之前的所有路径,或许可以尝试RewriteBase folder/dept/。
  • @John 您能否详细说明不起作用?内部 500 错误?没有重写? Apache 错误日志?
  • 不重写。它似乎没有将 /name?id=12 重写为 /name/12。此外,当我浏览 /name/12 时,我的图像和 CSS 链接不再起作用。只是一个空白页。
  • @John 将 [R=301] 放在最后,看看 URL 被改写成什么(如果有的话)。
【解决方案2】:

如果我理解您的问题是正确的,那么这些规则应该适用于您的 DOCUMENT_ROOT .htaccess 文件:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond  %{QUERY_STRING} ^id=(.*)$ [NC]
RewriteRule ^([^.]+)\.php$ /$1/%1? [L,NC]

这会将/folder/dept/accounting/name.php?id=12的URI在内部重定向到/folder/dept/accounting/name/12

并且如果我没有正确理解您的问题,而您实际上想要与上述答案相反,请在您的 .htaccess 中使用此代码:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond  %{QUERY_STRING} !^id= [NC]
RewriteRule ^(.*)/(\d+)/?$ /$1.php?id=$2 [L]

这会将/folder/dept/accounting/name/12 的URI在内部重定向到/folder/dept/accounting/name.php?id=12。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多