如何让url重写apache而不重写条件?

时间:2011-09-23 06:59:26

标签: apache mod-rewrite

抱歉,但我对url重写不太了解......

我想重写我的网址:
http://localhost/controller/index.php/user/edit

http://localhost/controller/user/edit

我可以用这个来实现.htaccess:

RewriteEngine On
RewriteBase /controller/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [PT,L]

但是,如果controller/user/edit.php中不存在文件,则重写有效 我希望controller/xxx下的每个请求都重新归结为controller/index.php/xxx该文件是否存在....

我删除了RewriteCond所以我现在的那个是这样的:

RewriteEngine On
RewriteBase /controller/
RewriteRule ^(.*)$ index.php/$1 [PT,L]

但是,它显示了 internal service error ..

1 个答案:

答案 0 :(得分:0)

有很多事情对我没有意义。主要是,你的问题是要将其中包含index.php的URL重写为没有的URL,但是你所说的重写规则在某些情况下有效,但它会将index.php预先置于请求之前。< / p>

如果您有权访问您的apache错误和访问日志,您可能会看到是否有关于错误发生的确切位置的更多信息 - 是在处理.htaccess文件时,还是在您的php程序中?

我将假设这里的目标是采用像/ controller / user / edit这样的“漂亮”网址,并让index.php程序实际处理路径的/ user / edit部分。

如果是这样,我想您可能想将RewriteBase设置为/,并将.htaccess更改为

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ controller/index.php/$1 [PT,L]

RewriteBase /指令表示所有请求都与服务器的DOCUMENT_ROOT设置有关。对重写规则的更改会指示所有请求转到目录controller和文件index.php,然后追加原始请求的路径。

(注意:在这种情况下,我认为你不想使用PT标志,并且最好将表格转义为。index\.php这是一个正则表达式运算符,但是我认为这些都与这里的问题无关)

目前尚不清楚你是否想要$ 1之前的/。如果你的PHP程序(index.php)被调用它并且知道如何处理它,那么它很好,但它有点不寻常,并且可能有一些情况下你最终得到了多个/ php程序。

但你真的想这样做吗? RewriteCond %{REQUEST_FILENAME} !-f的典型用法是处理诸如图像文件和css或javascript文件之类的情况,这些文件是静态的,不需要由控制器处理。 RewriteCond %{REQUEST_FILENAME} !-d取决于您的系统(但目的是看到请求不是针对目录的。)

无论如何,我提出的基本修改可能有所帮助,但如果没有,也许你可以澄清你的意图并提供一些实际的URL并查看index.php