【问题标题】:htaccess rewriterule and directoryindexhtaccess 重写规则和目录索引
【发布时间】:2025-12-24 22:55:11
【问题描述】:

我的重写器和目录索引有问题

DirectoryIndex invite.php about.php account.php

RewriteRule ^/?([a-z0-9_-]+)/?$ /user.php?u=$1 [L]

假设about.php 在 about 文件夹中。当我去 www.url.com/about/about.php 时,它工作正常。但是当我转到www.url.com/about/ 时,它会转到我的user.php 页面。当我去www.url.com/about,(没有结束斜线),它去www.url/about/?u=about

谁能帮帮我?

同时,我正在尝试设置用户可以转到www.url.com/andrewliu 而不是www.url.com/user.php?u=andrewliu 的位置

我想我需要以某种方式修复我的结尾斜杠和重定向?

谢谢!

编辑

我有这个

DirectoryIndex invite.php about.php account.php

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
RewriteRule ^/?([a-z0-9_-]+)/?$ /user.php?u=$1 [L]
RewriteCond %{QUERY_STRING} !^b= [NC]
RewriteRule ^(business)/(.*)$ /$1/index.php?b=$2 [L,NC,QSA]

【问题讨论】:

  • “但是当我访问 www.url.com/about/ 时,它会转到我的 user.php 页面”,因为您的规则正是这样做的。
  • @JonLin 为什么要这样做?我还是新手。
  • 您的规则说:“匹配任何带有数字和字母以及 _ 和 - 的内容”,并将其重写为 /user.php
  • @JonLin 哦,我。你对我应该怎么做有什么建议吗?基于我的某些标准?
  • @JonLin,实际上,你知道为什么当我有一个结尾/ 时它会搞砸吗?

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您需要添加检查以查看请求是否针对存在的文件或目录。您需要在规则之前添加这些条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-z0-9_-]+)/?$ /user.php?u=$1 [L]

这使得当您转到/about/ 时,由于它是一个存在的目录,因此不会应用此规则。但是如果你去/andrewliu,只要不是文件或目录就可以。

【讨论】:

  • 我对你所拥有的进行了轻微修改,这就是它无法正常工作的原因吗?
  • @andrewliu user.php 规则怎么了?你删了吗?
  • 我会展示我的总数。我只是想让你知道我以前有过这种情况
  • @andrewliu 条件只适用于紧随其后的规则,所以你有 ONLY 的条件适用于RewriteRule ^(.*)$ $1.php,你需要这两个高于 user.php 规则。
  • 啊啊啊,我不知道!!谢谢你!