我想重写我的网址:
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
..
答案 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