如何使url重写apache没有任何重写条件?

问题描述:

抱歉,但我'少了解关于URL重写......如何使url重写apache没有任何重写条件?

我想我的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到每个请求rewrited到controller/index.php/xxx该文件是否存在或不....

我已经删除RewriteCond所以我目前的一个是这样的:

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

但是,它显示internal service error ..

有很多事情对我没有意义。主要是,你的问题说要重写一个其中包含index.php的URL到一个没有的URL,但是你的重写规则,你说在某些情况下起作用的是相反的,它会将index.php预先挂接到请求。

如果您有权访问您的apache错误和访问日志,那么您可能会看到是否有更多关于错误发生的点的详细信息 - 处理.htaccess文件时的情况,还是来自您的php程序?

我会认为这里的目标是把“漂亮”的网址像/控制器/用户/编辑,并有计划的index.php实际处理的路径/用户/编辑部分。

如果是的话,我想你可能要设置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