【问题标题】:Htaccess rewrite with idHtaccess 用 id 重写
【发布时间】:2015-01-30 03:25:35
【问题描述】:

我在将 edit.php?id=1 重写为 edit/id/1 时遇到问题。现在我的 .htaccess 文件中有以下内容:

RewriteEngine On
RewriteBase /

RewriteRule ^edit/id/([^/.]+)$ edit.php?id=$1 [NC]

这不会更改网址。有什么能看出我做错了什么吗?

【问题讨论】:

  • 你想让它重定向到php文件吗?
  • 我想让它把我的网址从edit.php?id=1改写成edit/id/1
  • 那么你想在浏览器栏中看到的是edit/id/1?

标签: php .htaccess


【解决方案1】:

您需要一个额外的规则来从外部更改 URL。 这应该放在根 .htaccess 中:

RewriteEngine On
RewriteBase /

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/([^/]+)/edit\.php\?id=([^\s&]+) [NC]
RewriteRule ^ %1/edit/id/%2? [R=302,L,NE]

RewriteRule ^([^/]+)/edit/id/([^/.]+)$ $1/edit.php?id=$2 [NC,L,QSA]

【讨论】:

  • 这应该自动重写吧?但它不是
  • 这里是测试网址:link,我的 .htaccess 是我们的复制粘贴。
  • 成功了!那么当我得到其他文件夹时我应该怎么做:profile/edit..customer/edit等。
【解决方案2】:

试一试,看看它对您有什么作用。

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/edit/id/([^/.]+)$ $1/edit.php?id=$2 [NC,L]
   </IfModule>

或者,如果您只有几个相同的目录,您也可以这样做。将进入根 .htaccess 文件。

  <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(profiles|customers|test)/edit/id/([^/.]+)$ $1/edit.php?id=$2 [NC,L]
       </IfModule>

【讨论】:

  • 给我更多信息。你遇到了什么错误?怎么了?你期待什么结果。我不相信这是代码。
  • 什么都没有发生。 edit?id=1 不会重写为 edit/id/1。没有错误或类似的东西,我确实将确切的代码放入了我的 .htaccess 文件中。我导航到mywebsite/edit?id=1 不应该将网址重写为mywebsite/edit/id/1 吗?
  • 不,这不是重写的工作方式。您应该导航到mywebsite/edit/id/1,服务器将在后台重写为mywebsite/edit?id=1。用户永远不会看到mywebsite/edit?id=1,这就是pretty urls 的意义所在。
  • 刚刚导航到mywebsite/edit/id/1,它给了我500个内部服务器错误..
  • 好的,现在您需要检查您的 apache 错误日志以查看错误是什么,以便您解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2012-07-26
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多