开发者

how to make url rewrite apache whitout any rewrite condition?

开发者 https://www.devze.com 2023-04-07 02:45 出处:网络
sorry, but i\'am less understand about url rewrite... i want to rewrite my url from : http://localhost/controller/index.php/user/edit

sorry, but i'am less understand about url rewrite...

i want to rewrite my url from :

http://localhost/controller/index.php/user/edit

to

http://localhost/controller/user/edit

i can make it with this .htaccess :

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

but, the rewrite works if there is no file exist at controller/user/edit.php i want every request to under my controller/xxx is rewrited to controller/index.php/xxx whether the file is exist or not....

i have remove the RewriteCond so my current one is like this :

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

but, it shown internal service error..


There are a lot of things that don't make sense to me. Mainly, your question says to want to rewrite a URL having index.php in it to one that does not, but your rewrite rule, which you say works in some cases does the opposite, it pre-pends index.php to requests.

If you have access to your apache error and access log, you might see if there's more information about exactly at what point the error occurred -- was it when the .htaccess file was processed, or was it from within your php program?

I will assume that the goal here is to take "pretty" urls like /controller/user/edit and have the index.php program actually process the /user/edit part of the path.

If so, I think you may want to set the RewriteBase to /, and change your .htaccess to

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

The RewriteBase / directive says that all requests are relative to the server's DOCUMENT_ROOT setting. The change to the rewrite rule instructs all requests to go to the directory controller and file index.php, appending the original requested path afterwards.

(Note: I don't think you want to use the PT flag in this case, and it would be better form to escape the . which is a regex operator as index\.php, but I think neither of these are relevant to the problem here)

It is not clear if you do want the / before the $1. If your PHP program (index.php) is getting called with it present, and knows how to handle it, then it's fine, but it's a little unusual, and there may be cases where you end up with multiple /'s from within the php program.

But do you really want to do this? The typical use of the RewriteCond %{REQUEST_FILENAME} !-f is to handle cases such as image files and css or javascript files that are static and need not be handled by your controller. RewriteCond %{REQUEST_FILENAME} !-d depends on your system (but it's purpose to see that the request is not for a directory).

Anyway, the basic change as I proposed might help, but if not, perhaps you can clarify your intent and provide some actual URLs and a look inside index.php

0

精彩评论

暂无评论...
验证码 换一张
取 消