1

挣扎了 2 天,头发少了一磅,我想是时候寻求帮助了。我最近将我的项目迁移到一个主子目录,因此结构如下:

-application/
   -index.php
   -signup/
      -index.php
      -signup_set.php
-css/
-js/

我一直在尝试让 mod_rewrite 为我完成我的工作,以从所有 url 中排除“application/”。这是我进入根 .htaccess 的位置:

RewriteEngine On 

#first round through, prepend 'application/' to request
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^application

RewriteRule ^(.*)$ application/$1 [L]

#second round through, if the new url is not directory or file, append .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ $1.php [L] 

我可能对 regex/mod_rewrite 有很糟糕的理解,但这实际上似乎部分有效。部分地。奇怪的是,当我路由到“漂亮的 url”(例如 www/signup)时,顶部栏中的 url 被物理重写以包含“application/”(例如 www/application/signup)。所以不知何故,这个“无声”的重写过程变得非常响亮......有什么建议吗?我意识到我可以更改我的根目录,但这需要重写引用 css/js 文件的代码。我比什么都好奇,只是尝试了一些htaccess。任何帮助,将不胜感激!谢谢 StackOverflow,你摇滚。

PS 我在 Windows 7 上运行 Apache 并使用虚拟主机(以防万一)

4

1 回答 1

2

以下规则适用于我使用虚拟主机在 Windows 7 上运行 Apache。我改变的只是第二个RewriteCond

RewriteEngine On

# Append trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(?:\.\w+|/)$
RewriteRule ^(.*)$ /$1/ [L]

# First round through, prepend 'application/' to request
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/application
RewriteRule ^(.*)$ application/$1 [L]

# Second round through, if the new url is not directory or file, append .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.\w+$
RewriteRule ^(.*)/$ $1.php [L]
于 2012-07-15T00:48:11.843 回答