我正在开发在PHP的应用程序,我需要建立一个pretty的广泛的.htaccess重定向。我做了一些阅读,试着写RewriteConds自己,但它是一个有点以上我paygrade - 我希望有人有更多的经验可以提供帮助。这就是我要完成的:
I'm developing an app in php, and I need to set up a pretty broad .htaccess redirect. I did some reading and tried to write the RewriteConds myself, but it's a bit above my paygrade - I'm hoping someone with more experience can help. Here's what I'm trying to accomplish:
在该应用程序包含在 www.example.com/app /
。请不要在此目录以上重定向任何东西。
此目录,将需要被访问中存在的某些文件。目前这些 / APP /包括/ *
和 / APP / sb_pages / *
。这将改变,并在将来扩展,所以我需要一个优雅的解决方案,包括所有现有文件。这很好,如果重定向这些目录内的触发时,未找到文件 - 我所关心的是能够在访问文件,而无需重定向触发
在所有其他请求应被重定向到 /app/index.php
,在查询字符串传递尾随URL。例如,请求 / APP /路径1 /路径/
应重定向到 /app/index.php?path=path1/path2 /
重定向不应该是透明的。当用户请求 / APP /路径1 /路径/
,我想让他们相信他们已经在那里停留。他们的不应该看到URL更改为 /app/index.php?path=path1/path2 /
。
The app is contained in www.example.com/app/
. Don't redirect anything above this directory.
Some files exist in this directory that will need to be accessed. Currently these are /app/includes/*
and /app/sb_pages/*
. This will change and expand in the future, so I need an elegant solution that encompasses all existing files. It's fine if the redirect triggers within these directories when a file isn't found - all I care about is being able to access the files within without the redirect triggering.
All other requests should be redirected to /app/index.php
, with the trailing url passed in the querystring. For example, a request to /app/path1/path2/
should redirect to /app/index.php?path=path1/path2/
The redirect should not be transparent. When the user requests /app/path1/path2/
, I want them to believe they have remained there. They should not see the url change to /app/index.php?path=path1/path2/
.
只是为了更加清晰,这里有一个少数情况下阐述:
Just for added clarity, here's a few cases to elaborate:
/app/includes/sidebar.php
不应该重定向。
/app/includes/nothing.html
不存在 - 重定向是确定
/ APP /路径1 /路径/
应重定向到 /app/index.php?path=path1/path2 /
。用户还是应该看他们的当前URL为 / APP /路径1 /路径/
。
/app/includes/sidebar.php
should not redirect.
/app/includes/nothing.html
does not exist - redirect is OK
/app/path1/path2/
should redirect to /app/index.php?path=path1/path2/
. User should still see their current URL as /app/path1/path2/
.
我希望我已经清楚地解释它,pre-抢占大部分问题。如果你需要澄清,请不要犹豫,问。在此先感谢您的帮助!
I hope I've explained it clearly and pre-empted most questions. If you need clarification, please don't hesitate to ask. Thanks in advance for the help!
尝试在你的文档根目录添加到您的.htaccess文件:
Try adding this to your .htaccess file in your document root:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^app/(.*)$ /app/index.php?path=$1 [L,QSA]
请注意,如果你想访问现有目录(而不是文件)也没有被重定向,添加一个的RewriteCond%{} REQUEST_FILENAME!-d
上面的规则
Note that if you want accesses to existing directories (as opposed to files) to also not be redirected, add a RewriteCond %{REQUEST_FILENAME} !-d
above the rule.