【问题标题】:Basic mod_rewrite issue -> mysite.us/user/xyz.php to mysite.us/user/index.php?u=xyz基本 mod_rewrite 问题 -> mysite.us/user/xyz.php 到 mysite.us/user/index.php?u=xyz
【发布时间】:2012-06-13 10:07:40
【问题描述】:

我是第一次尝试 mod_rewrite,到目前为止运气不佳。我当前的 URL 格式为 http://mywebsite.com/user/index.php?u=123。如何将 URL 重写为 http://mywebsite.com/user/123

到目前为止,我已经(不成功)尝试了以下方法,导致 500 内部服务器错误

RewriteEngine On
RewriteRule ^user([^/]*)\.php$ /user/index.php?u=$1 [L]

我哪里错了?这应该很简单。

【问题讨论】:

    标签: regex url mod-rewrite


    【解决方案1】:

    你几乎说对了。而不是[^/] 匹配直到但不包括下一个/ 的所有内容,您希望([\d]+)$ 匹配所有数字直到最后。在user 之后需要/,最后删除.php

    RewriteEngine On
    RewriteRule ^user/([\d]+)$ /user/index.php?u=$1 [L]
    

    注意,我还从/user 中删除了右侧重写中的前导/。不过,这可能不是必需的;除非我自己测试,否则我永远记不起它与领先的 / 的行为。

    500 错误的原因很可能是重写循环。由于您最后匹配的是 .php,因此即使 user/index.php 也会匹配该规则,将其抛入无限循环。

    【讨论】:

    • 在将其添加到 .htaccess 文件后,我在 http://mysite.us/user/123 页面上收到 404。另一个网址 (http://mysite.us/user/index.php?u=123) 仍按应有的方式提供页面。
    • @acedanger 然后尝试替换我在/user/index.php 删除它的前导/
    • @acedanger 更改为[L,R],这样它会进行实际的重定向,您可以看到它最终到达的 URL。这很奇怪,我希望它可以工作。您在根目录下有 .htaccess,对吗?不在用户/目录中?
    • 不确定是否重要,但我的网站上有 WordPress。以下是我的.htaccess 文件的内容:# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteRule ^/user/([\d]+)$ user/index.php?u=$1 [L] </IfModule> # END WordPress
    • 其中一些确实很重要。将新规则移到 . index.php [L] 规则上方。此外,前导 / 位于右侧(重写),而不是左侧输入侧。见上文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2017-07-06
    • 2015-10-20
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多