Ken*_*ins 5 mod-rewrite apache-2.2
目前我有一个这样的 .htaccess 文件。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^/(always|rewrite|these|dirs)/ [NC]
RewriteRule ^(.*)$ router.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
当站点文件位于网络服务器的 document_root 中(即domain.com/abc.php-> <DOCUMENT_ROOT>/abc.php)时,它可以创建。但是在我们当前的设置(不可更改)中,这并不能保证。我们有时可以在 .htaccess 文件的文档根目录和文件夹之间有任意文件夹(即domain.com/something/abc.php-> <DOCUMENT_ROOT>/something/abc.php)。唯一的问题是第二个RewriteCond不再有效。无论如何,是否可以通过相对于.htaccess文件的路径动态检查访问的路径。
例如:
如果我有一个网站,文件domain.com/prefix/的目录在哪里.htaccess。
NOT FORCED TO REWRITE -> domain.com/prefix/index.php
FORCED TO REWRITE -> domain.com/prefix/rewrite/index.php
Run Code Online (Sandbox Code Playgroud)
如果我有一个网站,文件domain.com/的目录在哪里.htaccess。
NOT FORCED TO REWRITE -> domain.com/index.php
FORCED TO REWRITE -> domain.com/rewrite/index.php
Run Code Online (Sandbox Code Playgroud)
有一个解决方案,但并不简单。
\n\n使用RewriteMap。
我会这样做:
\n\n创建RewriteMap文件。浏览此处获取更多信息。这是一个非常简单的文本文件,其中:首先是不带 \'/\'的错误 URL ,然后是一个空格(至少),然后是正确的 url,如下所示:
\n\nok\xe2\x80\x8b /folder1/\nok /folder2/\nok /folder3/\nRun Code Online (Sandbox Code Playgroud)\n\n然后是代码:
\n\nRewriteMap myfoldermap \\\n dbm:/web/htdocs/yourwebsite.com/rewriterules/myfoldermap.map\n\nRewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)\n# Now in \'%1\' there\'s the name of the folder\n# Don\'t touch the URL but...\n# ...check if it exists in the map file\nRewriteRule (.*) - [QSA,E=FOLDERMAP:${myfoldermap:%1|notfound}]\n\n# if the environment is neither empty or not found...\nRewriteCond %{E:FOLDERMAP} !^(notfound|)$\n# this means we found something...\n# => apply the RewriteRule\nRewriteRule ^(.*)$ router.php [L,QSA]\nRun Code Online (Sandbox Code Playgroud)\n\n如果它不起作用:阅读我通常的“两个提示”,并在您的问题中添加重写日志。
\n\n如果您不在托管环境中(=如果它是您自己的服务器并且您可以修改虚拟主机,而不仅仅是文件.htaccess),请尝试使用该RewriteLog指令:它可以帮助您追踪此类问题:
# Trace:\n# (!) file gets big quickly, remove in prod environments:\nRewriteLog "/web/logs/mywebsite.rewrite.log"\nRewriteLogLevel 9\nRewriteEngine On\nRun Code Online (Sandbox Code Playgroud)\n\n我最喜欢的检查正则表达式的工具:
\n\nhttp://www.quanetic.com/Regex(不要忘记选择 ereg(POSIX) 而不是 preg(PCRE)!)
\n| 归档时间: |
|
| 查看次数: |
5682 次 |
| 最近记录: |