【问题标题】:htaccess mod rewrite confusionhtaccess mod 重写混淆
【发布时间】:2013-10-30 00:30:00
【问题描述】:

我正在尝试对我的 URL 应用 mod 重写以使其更好,但我被这个主题的所有困惑所困扰。

请你帮我看看我想做的以下例子:

我想将站点根目录中的任何变量附加到 lyprofile.php 页面中

# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{THE_REQUEST} /(.*)
RewriteRule /(.*) lyprofile.php?us=$1

我想要一个 url,例如 profile/settings 去 lysettings.php

# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{THE_REQUEST} /profile/settings
RewriteRule /profile/settings lysettings.php

如果工作的话,这两个示例应该可以帮助我计算出所有其他 URL,但我无法让这些工作。

您还需要一个绝对 URL,因为我在本地计算机上工作,而绝对 URL 会造成很多麻烦。以防万一我的绝对 URL 是 http://localhost/Linku2.5/

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    您通常希望从最具体的规则转到最​​不具体的规则。在您想要做的两件事中,第一件事是最不具体的,因为(.*) 可以是任何东西。所以我们必须从更具体、更少武断的/profile/settings开始。

    如果这些规则在您的 htaccess 文件中(在您的情况下,在 Link2.5 目录中),您不需要前导斜杠,所以很简单:

    # you only need to turn on once
    RewriteEngine On
    
    # Don't need absolute URLs, but you may need this line:
    RewriteBase /Link2.5/
    
    RewriteRule ^profile/settings lysettings.php [L]
    

    那么,因为你的其他规则太笼统了,所以你需要添加一些条件,以免造成无限循环(重写引擎会继续循环,直到 URI 停止变化):

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    
    RewriteRule ^(.+)$ lyprofile.php?us=$1 [L,QSA]
    

    如果你知道你的“us”变量只能是数字或字母,你可以让规则的行更具体一点:

    RewriteRule ^([A-Za-z0-9]+)$ lyprofile.php?us=$1 [L,QSA]
    

    等等

    【讨论】:

    • 我试了一遍又一遍,它只是说找不到网址;我做错了什么!
    • @JackTrowbridge 确保一切都在正确的位置,确保 mod_rewrite 已打开,确保您的 htaccess 文件正在被读取,确保您可以访问目标(例如 lysettings.php 和 lyprofile. php),检查你的错误日志,
    • 我有,但还有另一个问题,我认为这种方法对我来说毫无用处。当我让它与其他代码一起工作时,例如,我有一个重定向到 lysettings.php 的 url “profile/settings”;问题出在 lysettings.php 中,它的行为就像它具有 url 配置文件/设置一样,因此找不到所有样式表和链接,因为它们是从根目录引用的;它不重定向它基本上充当url?这正常吗?
    • @JackTrowbridge "它不重定向它基本上充当url?这正常吗?" 这就是“重写”,它完全在服务器端,它是与“重定向”不同,这是 mod_rewrite 要做的。至于 css 内容,您的内容中有相对 URI,将它们全部更改为绝对或在页面标题中添加 <base href="/Link2.5/"> 或任何内容
    【解决方案2】:

    你能在 vhosts 配置中检查这个吗?

    # Turn mod_rewrite on
    RewriteEngine On
    
    RewriteRule lyprofile\.php - [L]
    
    RewriteCond %{REQUEST_URI} /(.*)
    RewriteRule /(.*) lyprofile.php?us=$1 [L]
    
    RewriteCond %{REQUEST_URI} /profile/settings
    RewriteRule /profile/settings lysettings.php [L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多