【发布时间】:2016-03-17 19:05:44
【问题描述】:
我一直在努力实现的是让我的 .htaccess 文件重写所有 URL。
但是,无论我做什么,我都无法让它忽略现有目录。我的意思是,表现得好像它们不存在一样。
例如,假设我有以下文件结构:
/
dir1
file1.php
dir2
file2.php
.htaccess
假设我想将所有流量重定向到dir1/file1.php?url=path。
如果路径是现有目录,这对我永远不起作用。
例如,如果我导航到url/path/stuff/dir2,“重定向”会起作用,但地址栏中的 URL 会出于某种深不可测的原因更改为 url/path/stuff/dir2/?url=dir2。
这是我的.htaccess:
Options -MultiViews
Options -Indexes
Options +FollowSymLinks
# so navigating to a url with a trailing slash won't cause problems
DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dir1/file1.php?url=$1 [QSA,L]
【问题讨论】:
-
您向我们展示了您所有的 .htaccess 文件吗?您是否有类似这样的行: RewriteCond %{REQUEST_FILENAME} !-f 就目前而言,您的 .htaccess 应该无限循环。
-
@BareNakedCoder 啊!这解释了很多我不明白的事情。但是我添加了一个检查,它仍然没有改变行为。 (不过我编辑了这个问题。)
-
如果您不想在地址栏中出现
?url=dir2,但仍想将数据附加到$_GET["url"],请尝试删除QSA -
这里有两个帖子,我发现可能与您的问题有关,stackoverflow.com/questions/990392/…、stackoverflow.com/questions/12551382/…
-
@Andrew 我只是不明白为什么要更改地址栏,因为我没有进行任何重定向。这些问题有助于理解代码在做什么,但我仍然无法理解为什么要更改地址栏。
标签: php apache .htaccess mod-rewrite